Skip to content

Commit 58e55e6

Browse files
authored
chore(elk): transferring elk initialization to the user's side (#45)
1 parent da509c1 commit 58e55e6

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
"rbush": "^3.0.1"
4646
},
4747
"peerDependencies": {
48-
"elkjs": "^0.9.3",
4948
"react": "^16.0.0 || ^17.0.0 || ^18.0.0",
5049
"react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
5150
},
@@ -85,6 +84,7 @@
8584
"@typescript-eslint/parser": "5.39.0",
8685
"copyfiles": "^2.4.1",
8786
"cross-env": "^7.0.3",
87+
"elkjs": "^0.9.3",
8888
"eslint": "^8.0.0",
8989
"eslint-config-prettier": "^8.10.0",
9090
"eslint-import-resolver-typescript": "2.5.0",

src/plugins/elk/hooks/useElk.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
1-
import { useCallback, useEffect, useMemo, useState } from "react";
1+
import { useCallback, useEffect, useState } from "react";
22

3-
import ELK, { ElkLayoutArguments, ElkNode } from "elkjs";
3+
import type ELK from "elkjs";
4+
import type { ElkLayoutArguments, ElkNode } from "elkjs";
45

56
import { elkConverter } from "../converters/eklConverter";
67
import { ConverterResult } from "../types";
78

8-
export const useElk = (config: ElkNode, args?: ElkLayoutArguments & { onError?: (e: Error) => void }) => {
9+
export const useElk = (
10+
config: ElkNode,
11+
elk: InstanceType<typeof ELK>,
12+
args?: ElkLayoutArguments & { onError?: (e: Error) => void }
13+
) => {
914
const [result, setResult] = useState<ConverterResult | null>(null);
1015
const [isLoading, setIsLoading] = useState<boolean>(true);
1116

12-
const elk = useMemo(() => new ELK(), []);
13-
1417
const layout = useCallback(() => {
1518
return elk.layout(config, args);
1619
}, [elk, config, args]);
@@ -36,5 +39,5 @@ export const useElk = (config: ElkNode, args?: ElkLayoutArguments & { onError?:
3639
};
3740
}, [layout]);
3841

39-
return { result, isLoading, elk };
42+
return { result, isLoading };
4043
};

src/stories/plugins/elk/elk.stories.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useEffect, useMemo, useState } from "react";
22

33
import { Select, SelectOption, ThemeProvider } from "@gravity-ui/uikit";
44
import type { Meta, StoryFn } from "@storybook/react";
5+
import ELK from "elkjs";
56

67
import { Graph, GraphCanvas, GraphState, TBlock, TConnection, useGraph, useGraphEvent } from "../../../index";
78
import { MultipointConnection, useElk } from "../../../plugins";
@@ -29,6 +30,9 @@ import "@gravity-ui/uikit/styles/styles.css";
2930
const GraphApp = () => {
3031
const [algorithm, setAlgorithm] = useState(Algorithm.Layered);
3132
const [algorithms, setAlgorithms] = useState<SelectOption[]>([]);
33+
34+
const elk = useMemo(() => new ELK(), []);
35+
3236
const { graph, setEntities, start } = useGraph({
3337
settings: {
3438
connection: MultipointConnection,
@@ -39,7 +43,7 @@ const GraphApp = () => {
3943
return getExampleConfig(algorithm);
4044
}, [algorithm]);
4145

42-
const { isLoading, elk, result } = useElk(elkConfig);
46+
const { isLoading, result } = useElk(elkConfig, elk);
4347

4448
useEffect(() => {
4549
if (isLoading || !result) return;

0 commit comments

Comments
 (0)