Skip to content

Commit bacdc79

Browse files
authored
fix(graph): remove redux and useState and useContext hook (#23085)
<!-- Please make sure you have read the submission guidelines before posting an PR --> <!-- https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr --> <!-- Please make sure that your commit message follows our format --> <!-- Example: `fix(nx): must begin with lowercase` --> ## Current Behavior <!-- This is the behavior we have today --> ## Expected Behavior <!-- This is the behavior we should expect with the changes in this PR --> ## Related Issue(s) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #
1 parent 2e621f3 commit bacdc79

29 files changed

+127
-441
lines changed

graph/client/src/app/app.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import { themeInit } from '@nx/graph/ui-theme';
2-
import { rootStore } from '@nx/graph/state';
3-
import { Provider as StoreProvider } from 'react-redux';
42
import { rankDirInit } from './rankdir-resolver';
53
import { RouterProvider } from 'react-router-dom';
64
import { getRouter } from './get-router';
@@ -9,9 +7,5 @@ themeInit();
97
rankDirInit();
108

119
export function App() {
12-
return (
13-
<StoreProvider store={rootStore}>
14-
<RouterProvider router={getRouter()} />
15-
</StoreProvider>
16-
);
10+
return <RouterProvider router={getRouter()} />;
1711
}

graph/project-details/src/lib/project-details-page.tsx

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import {
1010
useParams,
1111
useRouteLoaderData,
1212
} from 'react-router-dom';
13-
import ProjectDetailsWrapper from './project-details-wrapper';
13+
import { ProjectDetailsWrapper } from './project-details-wrapper';
1414
import {
15+
ExpandedTargetsProvider,
1516
fetchProjectGraph,
1617
getProjectGraphDataService,
1718
useEnvironmentConfig,
@@ -50,20 +51,22 @@ export function ProjectDetailsPage() {
5051
);
5152

5253
return (
53-
<div className="flex w-full flex-col justify-center text-slate-700 dark:text-slate-400">
54-
<ScrollRestoration />
55-
{environment !== 'nx-console' ? (
56-
<ProjectDetailsHeader />
57-
) : (
58-
<div className="py-2"></div>
59-
)}
60-
<div className="mx-auto mb-8 w-full max-w-6xl flex-grow px-8">
61-
<ProjectDetailsWrapper
62-
project={project}
63-
sourceMap={sourceMap}
64-
errors={errors}
65-
></ProjectDetailsWrapper>
54+
<ExpandedTargetsProvider>
55+
<div className="flex w-full flex-col justify-center text-slate-700 dark:text-slate-400">
56+
<ScrollRestoration />
57+
{environment !== 'nx-console' ? (
58+
<ProjectDetailsHeader />
59+
) : (
60+
<div className="py-2"></div>
61+
)}
62+
<div className="mx-auto mb-8 w-full max-w-6xl flex-grow px-8">
63+
<ProjectDetailsWrapper
64+
project={project}
65+
sourceMap={sourceMap}
66+
errors={errors}
67+
></ProjectDetailsWrapper>
68+
</div>
6669
</div>
67-
</div>
70+
</ExpandedTargetsProvider>
6871
);
6972
}

graph/project-details/src/lib/project-details-wrapper.state.ts

Lines changed: 0 additions & 33 deletions
This file was deleted.

graph/project-details/src/lib/project-details-wrapper.tsx

Lines changed: 21 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,27 @@ import type { ProjectGraphProjectNode } from '@nx/devkit';
55
import { GraphError } from 'nx/src/command-line/graph/graph';
66
/* eslint-enable @nx/enforce-module-boundaries */
77
import { useNavigate, useNavigation, useSearchParams } from 'react-router-dom';
8-
import { connect } from 'react-redux';
98
import {
109
ErrorToast,
10+
ExpandedTargetsContext,
1111
getExternalApiService,
1212
useEnvironmentConfig,
1313
useRouteConstructor,
1414
} from '@nx/graph/shared';
1515
import { Spinner } from '@nx/graph/ui-components';
1616

1717
import { ProjectDetails } from '@nx/graph/ui-project-details';
18-
import { useCallback, useEffect } from 'react';
19-
import {
20-
mapStateToProps,
21-
mapDispatchToProps,
22-
mapStateToPropsType,
23-
mapDispatchToPropsType,
24-
} from './project-details-wrapper.state';
18+
import { useCallback, useContext, useEffect } from 'react';
2519

26-
type ProjectDetailsProps = mapStateToPropsType &
27-
mapDispatchToPropsType & {
28-
project: ProjectGraphProjectNode;
29-
sourceMap: Record<string, string[]>;
30-
errors?: GraphError[];
31-
};
20+
interface ProjectDetailsProps {
21+
project: ProjectGraphProjectNode;
22+
sourceMap: Record<string, string[]>;
23+
errors?: GraphError[];
24+
}
3225

33-
export function ProjectDetailsWrapperComponent({
26+
export function ProjectDetailsWrapper({
3427
project,
3528
sourceMap,
36-
setExpandTargets,
37-
expandTargets,
38-
collapseAllTargets,
3929
errors,
4030
}: ProjectDetailsProps) {
4131
const environment = useEnvironmentConfig()?.environment;
@@ -44,6 +34,8 @@ export function ProjectDetailsWrapperComponent({
4434
const { state: navigationState, location } = useNavigation();
4535
const routeConstructor = useRouteConstructor();
4636
const [searchParams, setSearchParams] = useSearchParams();
37+
const { expandedTargets, setExpandedTargets, collapseAllTargets } =
38+
useContext(ExpandedTargetsContext);
4739

4840
const handleViewInProjectGraph = useCallback(
4941
(data: { projectName: string }) => {
@@ -113,44 +105,39 @@ export function ProjectDetailsWrapperComponent({
113105
};
114106

115107
useEffect(() => {
116-
if (!project.data.targets) return;
117-
118108
const expandedTargetsParams = searchParams.get('expanded')?.split(',');
119109
if (expandedTargetsParams && expandedTargetsParams.length > 0) {
120-
setExpandTargets(expandedTargetsParams);
110+
setExpandedTargets(expandedTargetsParams);
121111
}
122112

123113
return () => {
124114
collapseAllTargets();
125-
searchParams.delete('expanded');
126-
setSearchParams(searchParams, { replace: true });
115+
setSearchParams(
116+
(currentSearchParams) => {
117+
currentSearchParams.delete('expanded');
118+
return currentSearchParams;
119+
},
120+
{ replace: true, preventScrollReset: true }
121+
);
127122
};
128123
}, []); // only run on mount
129124

130125
useEffect(() => {
131-
if (!project.data.targets) return;
132-
133126
const expandedTargetsParams =
134127
searchParams.get('expanded')?.split(',') || [];
135128

136-
if (expandedTargetsParams.join(',') === expandTargets.join(',')) {
129+
if (expandedTargetsParams.join(',') === expandedTargets.join(',')) {
137130
return;
138131
}
139132

140133
setSearchParams(
141134
(currentSearchParams) => {
142-
updateSearchParams(currentSearchParams, expandTargets);
135+
updateSearchParams(currentSearchParams, expandedTargets);
143136
return currentSearchParams;
144137
},
145138
{ replace: true, preventScrollReset: true }
146139
);
147-
}, [
148-
expandTargets,
149-
project.data.targets,
150-
setExpandTargets,
151-
searchParams,
152-
setSearchParams,
153-
]);
140+
}, [expandedTargets, searchParams, setSearchParams]);
154141

155142
if (
156143
navigationState === 'loading' &&
@@ -179,9 +166,3 @@ export function ProjectDetailsWrapperComponent({
179166
</>
180167
);
181168
}
182-
183-
export const ProjectDetailsWrapper = connect(
184-
mapStateToProps,
185-
mapDispatchToProps
186-
)(ProjectDetailsWrapperComponent);
187-
export default ProjectDetailsWrapper;

graph/shared/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ export * from './lib/use-interval-when';
77
export * from './lib/project-graph-data-service/get-project-graph-data-service';
88
export * from './lib/fetch-project-graph';
99
export * from './lib/error-toast';
10+
export * from './lib/expanded-targets-provider';
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { createContext, useState } from 'react';
2+
3+
export const ExpandedTargetsContext = createContext<{
4+
expandedTargets?: string[];
5+
setExpandedTargets?: (expandedTargets: string[]) => void;
6+
toggleTarget?: (targetName: string) => void;
7+
collapseAllTargets?: () => void;
8+
}>({});
9+
10+
export const ExpandedTargetsProvider = ({ children }) => {
11+
const [expandedTargets, setExpandedTargets] = useState<string[]>([]);
12+
13+
const toggleTarget = (targetName: string) => {
14+
setExpandedTargets((prevExpandedTargets) => {
15+
if (prevExpandedTargets.includes(targetName)) {
16+
return prevExpandedTargets.filter((name) => name !== targetName);
17+
}
18+
return [...prevExpandedTargets, targetName];
19+
});
20+
};
21+
22+
const collapseAllTargets = () => {
23+
setExpandedTargets([]);
24+
};
25+
26+
return (
27+
<ExpandedTargetsContext.Provider
28+
value={{
29+
expandedTargets,
30+
setExpandedTargets,
31+
toggleTarget,
32+
collapseAllTargets,
33+
}}
34+
>
35+
{children}
36+
</ExpandedTargetsContext.Provider>
37+
);
38+
};

graph/state/.babelrc

Lines changed: 0 additions & 12 deletions
This file was deleted.

graph/state/.eslintrc.json

Lines changed: 0 additions & 18 deletions
This file was deleted.

graph/state/project.json

Lines changed: 0 additions & 11 deletions
This file was deleted.

graph/state/src/index.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

graph/state/src/lib/expand-targets/expand-targets.slice.ts

Lines changed: 0 additions & 54 deletions
This file was deleted.

graph/state/src/lib/root/root-state.initial.ts

Lines changed: 0 additions & 9 deletions
This file was deleted.

graph/state/src/lib/root/root-state.interface.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

graph/state/src/lib/root/root.reducer.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)