Skip to content

Commit c9f077c

Browse files
committed
perf: avoid creation of intermediate array
Signed-off-by: Andres Correa Casablanca <castarco@coderspirit.xyz>
1 parent 10b4bda commit c9f077c

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

.storybook/stories.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
.even {
22
fill: red;
33
}
4+
5+
.odd {
6+
stroke-dasharray: 1.5 0.5;
7+
}

src/BeautifulTree.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export function BeautifulTree({
6969
circle { stroke: black; fill: white; }
7070
`}</style>
7171
{/* TODO: introduce edge "styles" (straight, cornered, curved..., plus CSS styles) */}
72-
{[...edgesIterator(treeWithLayout)].map((edge, idx) => {
72+
{Array.from(edgesIterator(treeWithLayout), (edge, idx) => {
7373
return (
7474
<line
7575
key={`${id}-edge-${idx}`}
@@ -84,7 +84,7 @@ export function BeautifulTree({
8484
/>
8585
)
8686
})}
87-
{[...postOrderIterator(treeWithLayout)].map((node, idx) => {
87+
{Array.from(postOrderIterator(treeWithLayout), (node, idx) => {
8888
const aX = node.meta.pos.x
8989
const aY = node.meta.pos.y
9090
return (

src/stories/BeautifulTree.stories.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ const wideTree_D: Tree = {
239239
data: { v: -1 },
240240
children: [
241241
{
242+
edgeData: { e: 1 },
242243
node: {
243244
data: { v: -2 },
244245
children: [
@@ -247,7 +248,7 @@ const wideTree_D: Tree = {
247248
data: { v: -3 },
248249
children: [
249250
{ node: { data: { v: -4 } } },
250-
{ node: { data: { v: -2.5 } } },
251+
{ edgeData: { e: 1 }, node: { data: { v: -2.5 } } },
251252
],
252253
},
253254
},
@@ -293,6 +294,12 @@ const getCssFromNodeData = (
293294
return typeof data?.['v'] === 'number' && data['v'] % 2 === 0 ? ['even'] : []
294295
}
295296

297+
const getCssFromEdgeData = (
298+
data?: Readonly<Record<string, unknown>>,
299+
): string[] => {
300+
return typeof data?.['e'] === 'number' && data['e'] % 2 === 1 ? ['odd'] : []
301+
}
302+
296303
export const LeftShifted_Tree: Story = {
297304
args: {
298305
id: 'leftshifted-small-tree',
@@ -327,6 +334,7 @@ export const Centered3_Tree: Story = {
327334
tree: smallTree,
328335
computeLayout: computeSmartLayout,
329336
nodeClassesInferrer: getCssFromNodeData,
337+
edgeClassesInferrer: getCssFromEdgeData,
330338
},
331339
}
332340

@@ -340,6 +348,7 @@ export const Centered3_Big_Tree: Story = {
340348
tree: bigTree,
341349
computeLayout: computeSmartLayout,
342350
nodeClassesInferrer: getCssFromNodeData,
351+
edgeClassesInferrer: getCssFromEdgeData,
343352
},
344353
}
345354

@@ -353,6 +362,7 @@ export const Centered3_Wide_Tree_A: Story = {
353362
tree: wideTree_A,
354363
computeLayout: computeSmartLayout,
355364
nodeClassesInferrer: getCssFromNodeData,
365+
edgeClassesInferrer: getCssFromEdgeData,
356366
},
357367
}
358368

@@ -366,6 +376,7 @@ export const Centered3_Wide_Tree_B: Story = {
366376
tree: wideTree_B,
367377
computeLayout: computeSmartLayout,
368378
nodeClassesInferrer: getCssFromNodeData,
379+
edgeClassesInferrer: getCssFromEdgeData,
369380
},
370381
}
371382

@@ -379,6 +390,7 @@ export const Centered3_Wide_Tree_Bm: Story = {
379390
tree: wideTree_Bm,
380391
computeLayout: computeSmartLayout,
381392
nodeClassesInferrer: getCssFromNodeData,
393+
edgeClassesInferrer: getCssFromEdgeData,
382394
},
383395
}
384396

@@ -392,6 +404,7 @@ export const Centered3_Wide_Tree_C: Story = {
392404
tree: wideTree_C,
393405
computeLayout: computeSmartLayout,
394406
nodeClassesInferrer: getCssFromNodeData,
407+
edgeClassesInferrer: getCssFromEdgeData,
395408
},
396409
}
397410

@@ -405,5 +418,6 @@ export const Centered3_Wide_Tree_D: Story = {
405418
tree: wideTree_D,
406419
computeLayout: computeSmartLayout,
407420
nodeClassesInferrer: getCssFromNodeData,
421+
edgeClassesInferrer: getCssFromEdgeData,
408422
},
409423
}

0 commit comments

Comments
 (0)