31 lines
775 B
TypeScript
31 lines
775 B
TypeScript
import { internalsSymbol } from '@xyflow/system';
|
|
|
|
import { useStore } from './useStore';
|
|
import type { ReactFlowState } from '../types';
|
|
|
|
export type UseNodesInitializedOptions = {
|
|
includeHiddenNodes?: boolean;
|
|
};
|
|
|
|
const selector = (options: UseNodesInitializedOptions) => (s: ReactFlowState) => {
|
|
if (s.nodes.length === 0) {
|
|
return false;
|
|
}
|
|
|
|
return s.nodes
|
|
.filter((n) => (options.includeHiddenNodes ? true : !n.hidden))
|
|
.every((n) => n[internalsSymbol]?.handleBounds !== undefined);
|
|
};
|
|
|
|
const defaultOptions = {
|
|
includeHiddenNodes: false,
|
|
};
|
|
|
|
function useNodesInitialized(options: UseNodesInitializedOptions = defaultOptions): boolean {
|
|
const initialized = useStore(selector(options));
|
|
|
|
return initialized;
|
|
}
|
|
|
|
export default useNodesInitialized;
|