@@ -13,6 +13,7 @@ import { useMemo } from "react";
13
13
import { PlainMessage } from "@bufbuild/protobuf" ;
14
14
import { useConfiguration } from "../configurations/configuration-queries" ;
15
15
import { OrganizationSettings } from "@gitpod/public-api/lib/gitpod/v1/organization_pb" ;
16
+ import { useDeepCompareMemoize } from "use-deep-compare-effect" ;
16
17
17
18
export const DEFAULT_WS_CLASS = "g1-standard" ;
18
19
@@ -123,6 +124,13 @@ export const useAllowedWorkspaceClassesMemo = (
123
124
124
125
const isLoading = isLoadingOrgSettings || isLoadingInstallationCls || isLoadingConfiguration ;
125
126
127
+ const depItems = [
128
+ installationClasses ,
129
+ orgSettings ,
130
+ options ,
131
+ configuration ?. workspaceSettings ?. restrictedWorkspaceClasses ,
132
+ configuration ?. workspaceSettings ?. workspaceClass ,
133
+ ] ;
126
134
const data = useMemo ( ( ) => {
127
135
return getAllowedWorkspaceClasses (
128
136
installationClasses ,
@@ -131,12 +139,10 @@ export const useAllowedWorkspaceClassesMemo = (
131
139
configuration ?. workspaceSettings ?. workspaceClass ,
132
140
options ,
133
141
) ;
134
- } , [
135
- installationClasses ,
136
- orgSettings ,
137
- options ,
138
- configuration ?. workspaceSettings ?. restrictedWorkspaceClasses ,
139
- configuration ?. workspaceSettings ?. workspaceClass ,
140
- ] ) ;
142
+ // react useMemo is using `Object.is` to compare dependencies so array / object will make re-render re-call useMemo,
143
+ // see also https://react.dev/reference/react/useMemo#every-time-my-component-renders-the-calculation-in-usememo-re-runs
144
+ //
145
+ // eslint-disable-next-line react-hooks/exhaustive-deps
146
+ } , [ useDeepCompareMemoize ( depItems ) ] ) ;
141
147
return { ...data , isLoading } ;
142
148
} ;
0 commit comments