mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-15 18:04:55 -05:00
29 lines
1.3 KiB
TypeScript
29 lines
1.3 KiB
TypeScript
import { createSelector } from '@reduxjs/toolkit';
|
|
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
|
import { useInputFieldValue } from 'features/nodes/hooks/useInputFieldValue';
|
|
import { fieldValueReset } from 'features/nodes/store/nodesSlice';
|
|
import { selectWorkflowSlice } from 'features/nodes/store/workflowSlice';
|
|
import { isEqual } from 'lodash-es';
|
|
import { useCallback, useMemo } from 'react';
|
|
|
|
export const useInputFieldInitialLinearViewValue = (nodeId: string, fieldName: string) => {
|
|
const dispatch = useAppDispatch();
|
|
const selectInitialLinearViewValue = useMemo(
|
|
() =>
|
|
createSelector(
|
|
selectWorkflowSlice,
|
|
(workflow) =>
|
|
workflow.originalExposedFieldValues.find((v) => v.nodeId === nodeId && v.fieldName === fieldName)?.value
|
|
),
|
|
[nodeId, fieldName]
|
|
);
|
|
const initialLinearViewValue = useAppSelector(selectInitialLinearViewValue);
|
|
const value = useInputFieldValue(nodeId, fieldName);
|
|
const isValueChanged = useMemo(() => !isEqual(value, initialLinearViewValue), [value, initialLinearViewValue]);
|
|
const resetToInitialLinearViewValue = useCallback(() => {
|
|
dispatch(fieldValueReset({ nodeId, fieldName, value: initialLinearViewValue }));
|
|
}, [dispatch, fieldName, nodeId, initialLinearViewValue]);
|
|
|
|
return { initialLinearViewValue, isValueChanged, resetToInitialLinearViewValue };
|
|
};
|