Merge pull request #5703 from xyflow/fix/use-nodes-data-type
Improve return type of useNodesData
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { useCallback } from 'react';
|
||||
import { shallowNodeData } from '@xyflow/system';
|
||||
import { DistributivePick, shallowNodeData } from '@xyflow/system';
|
||||
|
||||
import { useStore } from '../hooks/useStore';
|
||||
import type { Node } from '../types';
|
||||
@@ -25,11 +25,11 @@ import type { Node } from '../types';
|
||||
export function useNodesData<NodeType extends Node = Node>(
|
||||
/** The id of the node to get the data from. */
|
||||
nodeId: string
|
||||
): Pick<NodeType, 'id' | 'type' | 'data'> | null;
|
||||
): DistributivePick<NodeType, 'id' | 'type' | 'data'> | null;
|
||||
export function useNodesData<NodeType extends Node = Node>(
|
||||
/** The ids of the nodes to get the data from. */
|
||||
nodeIds: string[]
|
||||
): Pick<NodeType, 'id' | 'type' | 'data'>[];
|
||||
): DistributivePick<NodeType, 'id' | 'type' | 'data'>[];
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export function useNodesData(nodeIds: any): any {
|
||||
const nodesData = useStore(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { shallowNodeData } from '@xyflow/system';
|
||||
import { shallowNodeData, type DistributivePick } from '@xyflow/system';
|
||||
|
||||
import type { Node } from '$lib/types';
|
||||
import { useStore } from '$lib/store';
|
||||
@@ -12,10 +12,10 @@ import { useStore } from '$lib/store';
|
||||
*/
|
||||
export function useNodesData<NodeType extends Node = Node>(
|
||||
nodeId: string
|
||||
): { current: Pick<NodeType, 'id' | 'data' | 'type'> | null };
|
||||
): { current: DistributivePick<NodeType, 'id' | 'data' | 'type'> | null };
|
||||
export function useNodesData<NodeType extends Node = Node>(
|
||||
nodeIds: string[]
|
||||
): { current: Pick<NodeType, 'id' | 'data' | 'type'>[] };
|
||||
): { current: DistributivePick<NodeType, 'id' | 'data' | 'type'>[] };
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export function useNodesData(nodeIds: any): any {
|
||||
const { nodes, nodeLookup } = $derived(useStore());
|
||||
|
||||
@@ -56,3 +56,10 @@ export type Transform = [number, number, number];
|
||||
* to represent an unbounded extent.
|
||||
*/
|
||||
export type CoordinateExtent = [[number, number], [number, number]];
|
||||
|
||||
/**
|
||||
* Using Pick with a union type (e.g. `NodeType`) will merge every property type along all union members.
|
||||
* See https://github.com/microsoft/TypeScript/issues/28339#issuecomment-463577347
|
||||
* Note: Currently you are able to Pick properties that are not in the type without error.
|
||||
*/
|
||||
export type DistributivePick<T, K extends string> = T extends unknown ? { [P in Extract<keyof T, K>]: T[P] } : never;
|
||||
|
||||
Reference in New Issue
Block a user