mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-14 19:54:58 -05:00
This is a squash of a lot of scattered commits that became very difficult to clean up and make individually. Sorry. Besides the new UI, there are a number of notable changes: - Publishing logic is disabled in OSS by default. To enable it, provided a `disabledFeatures` prop _without_ "publishWorkflow". - Enqueuing a workflow is no longer handled in a redux listener. It was hard to track the state of the enqueue logic in the listener. It is now in a hook. I did not migrate the canvas and upscaling tabs - their enqueue logic is still in the listener. - When queueing a validation run, the new `useEnqueueWorkflows()` hook will update the payload with the required data for the run. - Some logic is added to the socket event listeners to handle workflow publish runs completing. - The workflow library side nav has a new "published" view. It is hidden when the "publishWorkflow" feature is disabled. - I've added `Safe` and `OrThrow` versions of some workflows hooks. These hooks typically retrieve some data from redux. For example, a node. The `Safe` hooks return the node or null if it cannot be found, while the `OrThrow` hooks return the node or raise if it cannot be found. The `OrThrow` hooks should be used within one of the gate components. These components use the `Safe` hooks and render a fallback if e.g. the node isn't found. This change is required for some of the publish flow UI. - Add support for locking the workflow editor. When locked, you can pan and zoom but that's it. Currently, it is only locked during publish flow and if a published workflow is opened.
18 lines
519 B
TypeScript
18 lines
519 B
TypeScript
import { logger } from 'app/logging/logger';
|
|
import { $flow } from 'features/nodes/store/reactFlowInstance';
|
|
import { useCallback } from 'react';
|
|
|
|
const log = logger('workflows');
|
|
|
|
export const useZoomToNode = (nodeId: string) => {
|
|
const zoomToNode = useCallback(() => {
|
|
const flow = $flow.get();
|
|
if (!flow) {
|
|
log.warn('No flow instance found, cannot zoom to node');
|
|
return;
|
|
}
|
|
flow.fitView({ duration: 300, maxZoom: 1.5, nodes: [{ id: nodeId }] });
|
|
}, [nodeId]);
|
|
return zoomToNode;
|
|
};
|