Skip to content

Commit 7f6bd3e

Browse files
committed
fix(TypeScript): tablieList => item is always ExtendedNode<TableNode> instead of TableNode
1 parent bf3b1d9 commit 7f6bd3e

File tree

8 files changed

+34
-25
lines changed

8 files changed

+34
-25
lines changed

.storybook/stories/Types/data.story.mdx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@ export type TableNode = {
1313
[prop: string]: any,
1414
};
1515

16-
export type ExtendedTableNode = TableNode & {
17-
ancestors: TableNode[],
16+
export type ExtendedNode<T extends TableNode> = T & {
17+
treeXLevel?: number;
18+
treeYLevel?: number;
19+
parentNode?: ExtendedNode<T> | Nullish;
20+
ancestors?: ExtendedNode<T>[];
1821
};
1922

2023
export type Data = {

src/common/util/modifiers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { TableNode, Features } from '@table-library/react-table-library/types/table';
1+
import { TableNode, Features, ExtendedNode } from '@table-library/react-table-library/types/table';
22

33
export const applyModifiers =
44
({ sort, pagination, tree }: Features) =>
55
(nodes: TableNode[]) => {
6-
let modifiedNodes = [...nodes];
6+
let modifiedNodes: ExtendedNode<TableNode>[] = [...nodes];
77

88
modifiedNodes = sort ? sort.modifier(modifiedNodes) : modifiedNodes;
99

src/common/util/tree/fromTreeToList.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
11
import { Nullish } from '@table-library/react-table-library/types/common';
2-
import { Data, TableNode } from '@table-library/react-table-library/types/table';
2+
import { Data, TableNode, ExtendedNode } from '@table-library/react-table-library/types/table';
33

44
import { hasLeaves } from './hasLeaves';
55

6-
type ExtendedNode = {
7-
treeXLevel: number;
8-
treeYLevel: number;
9-
parentNode: TableNode;
10-
ancestors: TableNode[];
11-
};
12-
136
export const fromTreeToList = <T extends TableNode>(nodes: T[] | Nullish): T[] =>
147
(nodes || []).reduce((acc: T[], value: T) => {
158
acc = acc.concat(value); // eslint-disable-line no-param-reassign
@@ -27,9 +20,9 @@ export const fromTreeToListExtended = (
2720
treeIds: string[],
2821
treeXLevel = 0,
2922
treeYLevel = 0,
30-
parentNode: (TableNode & ExtendedNode) | Nullish,
31-
): (TableNode & ExtendedNode)[] =>
32-
(nodes || []).reduce((acc: (TableNode & ExtendedNode)[], value: TableNode) => {
23+
parentNode: ExtendedNode<TableNode> | Nullish,
24+
): ExtendedNode<TableNode>[] =>
25+
(nodes || []).reduce((acc: ExtendedNode<TableNode>[], value: TableNode) => {
3326
let listNode;
3427

3528
if (value.nodes) {
@@ -41,14 +34,17 @@ export const fromTreeToListExtended = (
4134
const extendedNode = {
4235
treeXLevel,
4336
treeYLevel,
44-
parentNode: parentNode || data,
45-
ancestors: parentNode ? [parentNode, ...parentNode.ancestors] : [parentNode || data],
46-
} as ExtendedNode;
37+
// TODO: data needs to be explicitly typed here for this edge case of root
38+
parentNode: (parentNode || data) as ExtendedNode<TableNode>,
39+
ancestors: (parentNode
40+
? [parentNode, ...(parentNode?.ancestors ?? [])]
41+
: [parentNode || data]) as ExtendedNode<TableNode>[],
42+
};
4743

4844
listNode = {
4945
...listNode,
5046
...extendedNode,
51-
} as TableNode & ExtendedNode;
47+
} as ExtendedNode<TableNode>;
5248

5349
acc = acc.concat(listNode); // eslint-disable-line no-param-reassign
5450

src/pagination/usePagination.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useSyncControlledState } from '@table-library/react-table-library/commo
55
import { useSyncRefState } from '@table-library/react-table-library/common/util/useSyncRefState';
66

77
import { Action, State, StateAndChange } from '@table-library/react-table-library/types/common';
8-
import { Data, TableNode } from '@table-library/react-table-library/types/table';
8+
import { Data, ExtendedNode, TableNode } from '@table-library/react-table-library/types/table';
99
import {
1010
Pages,
1111
Pagination,
@@ -139,7 +139,7 @@ const usePagination = (
139139
getPageBoundaries,
140140
};
141141

142-
const modifier = (nodes: TableNode[]): TableNode[] => {
142+
const modifier = (nodes: TableNode[]): ExtendedNode<TableNode>[] => {
143143
if (mergedOptions.isServer) {
144144
return nodes;
145145
}

src/sort/useSort.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import IconChevronSingleUp from '@table-library/react-table-library/common/icons
88
import IconChevronSingleUpDown from '@table-library/react-table-library/common/icons/IconChevronSingleUpDown';
99

1010
import { Action, State, StateAndChange } from '@table-library/react-table-library/types/common';
11-
import { Data, TableNode } from '@table-library/react-table-library/types/table';
11+
import { Data, ExtendedNode, TableNode } from '@table-library/react-table-library/types/table';
1212
import {
1313
Sort,
1414
SortOptions,
@@ -163,7 +163,7 @@ const useSort = (
163163

164164
const stateAndGetters = { ...state, sortFn };
165165

166-
const modifier = (nodes: TableNode[]): TableNode[] => {
166+
const modifier = (nodes: TableNode[]): ExtendedNode<TableNode>[] => {
167167
if (mergedOptions.isServer) {
168168
return nodes;
169169
}

src/tree/useTree.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
Features,
1818
FeatureProps,
1919
RowProps,
20+
ExtendedNode,
2021
} from '@table-library/react-table-library/types/table';
2122
import {
2223
Tree,
@@ -120,7 +121,7 @@ const useTree = (
120121
},
121122
};
122123

123-
const modifier = (nodes: TableNode[]): TableNode[] => {
124+
const modifier = (nodes: TableNode[]): ExtendedNode<TableNode>[] => {
124125
if (mergedOptions.isServer) {
125126
return nodes;
126127
}

src/types/common.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { ExtendedNode, TableNode } from './table';
2+
13
export type Nullish = null | undefined;
24

35
export type Action = {
@@ -21,7 +23,7 @@ export type StateAndChange = {
2123
onChange?: MiddlewareFunction;
2224
};
2325

24-
export type Modifier = (nodes: any[]) => any[];
26+
export type Modifier = (nodes: TableNode[]) => TableNode[] | ExtendedNode<TableNode>[];
2527

2628
type IdReducerFunctionsOptions = {
2729
isCarryForward?: boolean;

src/types/table.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,13 @@ export type TableNode = {
8585
[prop: string]: any;
8686
};
8787

88+
export type ExtendedNode<T extends TableNode> = T & {
89+
treeXLevel?: number;
90+
treeYLevel?: number;
91+
parentNode?: ExtendedNode<T> | Nullish;
92+
ancestors?: ExtendedNode<T>[];
93+
};
94+
8895
export type Data = {
8996
pageInfo?: any;
9097
nodes: TableNode[];

0 commit comments

Comments
 (0)