Merge branch 'feat/node-toolbar' of github.com:wbkd/react-flow into feat/node-toolbar
This commit is contained in:
@@ -25,9 +25,11 @@ const nodeEqualityFn = (a: SelectedNode, b: SelectedNode) =>
|
||||
a?.selected === b?.selected &&
|
||||
a?.[internalsSymbol]?.z === b?.[internalsSymbol]?.z;
|
||||
|
||||
const transformSelector = (state: ReactFlowState): Transform => state.transform;
|
||||
const selectedNodesCountSelector = (state: ReactFlowState): number =>
|
||||
Array.from(state.nodeInternals.values()).filter((node) => node.selected).length;
|
||||
const storeSelector = (state: ReactFlowState) => ({
|
||||
transform: state.transform,
|
||||
nodeOrigin: state.nodeOrigin,
|
||||
selectedNodesCount: Array.from(state.nodeInternals.values()).filter((node) => node.selected).length,
|
||||
});
|
||||
|
||||
function getTransform(nodeRect: Rect, transform: Transform, position: Position, offset: number): string {
|
||||
// position === Position.Top
|
||||
@@ -70,15 +72,14 @@ function NodeToolbar({
|
||||
}: NodeToolbarProps) {
|
||||
const nodeSelector = useCallback((state: ReactFlowState): SelectedNode => state.nodeInternals.get(nodeId), [nodeId]);
|
||||
const node = useStore(nodeSelector, nodeEqualityFn);
|
||||
const transform = useStore(transformSelector, shallow);
|
||||
const selectedNodesCount = useStore(selectedNodesCountSelector);
|
||||
const { transform, nodeOrigin, selectedNodesCount } = useStore(storeSelector, shallow);
|
||||
const isActive = typeof isVisible === 'boolean' ? isVisible : node?.selected && selectedNodesCount === 1;
|
||||
|
||||
if (!isActive || !node) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const nodeRect: Rect = getRectOfNodes([node]);
|
||||
const nodeRect: Rect = getRectOfNodes([node], nodeOrigin);
|
||||
|
||||
const wrapperStyle: CSSProperties = {
|
||||
transform: getTransform(nodeRect, transform, position, offset),
|
||||
|
||||
Reference in New Issue
Block a user