Skip to content

Commit de11363

Browse files
committed
Replace isUpdating with object
This makes it possible to detect parallel mutations.
1 parent d2e6d37 commit de11363

File tree

2 files changed

+27
-38
lines changed

2 files changed

+27
-38
lines changed

site/src/pages/DeploySettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPage.tsx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,17 +90,12 @@ const EditOAuth2AppPage: FC = () => {
9090
secrets={oauth2AppSecretsQuery.data}
9191
isLoadingApp={oauth2AppQuery.isLoading}
9292
isLoadingSecrets={oauth2AppQuery.isLoading}
93-
isUpdating={
94-
putMutation.isLoading
95-
? "update-app"
96-
: deleteMutation.isLoading
97-
? "delete-app"
98-
: postSecretMutation.isLoading
99-
? "create-secret"
100-
: deleteSecretMutation.isLoading
101-
? "delete-secret"
102-
: false
103-
}
93+
mutatingResource={{
94+
updateApp: putMutation.isLoading,
95+
deleteApp: deleteMutation.isLoading,
96+
createSecret: postSecretMutation.isLoading,
97+
deleteSecret: deleteSecretMutation.isLoading,
98+
}}
10499
newAppSecret={newAppSecret}
105100
dismissNewSecret={() => setNewAppSecret(undefined)}
106101
error={

site/src/pages/DeploySettingsPage/OAuth2AppsSettingsPage/EditOAuth2AppPageView.tsx

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,20 @@ import { TableLoader } from "components/TableLoader/TableLoader";
2525
import { createDayString } from "utils/createDayString";
2626
import { OAuth2AppForm } from "./OAuth2AppForm";
2727

28+
export type MutatingResource = {
29+
updateApp: boolean;
30+
createSecret: boolean;
31+
deleteApp: boolean;
32+
deleteSecret: boolean;
33+
};
34+
2835
type EditOAuth2AppProps = {
2936
app?: TypesGen.OAuth2App;
3037
isLoadingApp: boolean;
3138
isLoadingSecrets: boolean;
32-
isUpdating:
33-
| "update-app"
34-
| "create-secret"
35-
| "delete-app"
36-
| "delete-secret"
37-
| false;
39+
// mutatingResource indicates which resources, if any, are currently being
40+
// mutated.
41+
mutatingResource: MutatingResource;
3842
updateApp: (req: TypesGen.PutOAuth2AppRequest) => void;
3943
deleteApp: () => void;
4044
generateAppSecret: () => void;
@@ -49,7 +53,7 @@ export const EditOAuth2AppPageView: FC<EditOAuth2AppProps> = ({
4953
app,
5054
isLoadingApp,
5155
isLoadingSecrets,
52-
isUpdating,
56+
mutatingResource,
5357
updateApp,
5458
deleteApp,
5559
generateAppSecret,
@@ -127,7 +131,7 @@ export const EditOAuth2AppPageView: FC<EditOAuth2AppProps> = ({
127131
<>
128132
<DeleteDialog
129133
isOpen={showDelete}
130-
confirmLoading={isUpdating === "delete-app"}
134+
confirmLoading={mutatingResource.deleteApp}
131135
name={app.name}
132136
entity="OAuth2 application"
133137
onConfirm={deleteApp}
@@ -146,7 +150,7 @@ export const EditOAuth2AppPageView: FC<EditOAuth2AppProps> = ({
146150
<OAuth2AppForm
147151
app={app}
148152
onSubmit={updateApp}
149-
isUpdating={isUpdating === "update-app"}
153+
isUpdating={mutatingResource.updateApp}
150154
error={error}
151155
actions={
152156
<Button
@@ -167,7 +171,7 @@ export const EditOAuth2AppPageView: FC<EditOAuth2AppProps> = ({
167171
generateAppSecret={generateAppSecret}
168172
deleteAppSecret={deleteAppSecret}
169173
isLoadingSecrets={isLoadingSecrets}
170-
isUpdating={isUpdating}
174+
mutatingResource={mutatingResource}
171175
/>
172176
</>
173177
)}
@@ -180,20 +184,15 @@ type OAuth2AppSecretsTableProps = {
180184
secrets?: readonly TypesGen.OAuth2AppSecret[];
181185
generateAppSecret: () => void;
182186
isLoadingSecrets: boolean;
183-
isUpdating:
184-
| "update-app"
185-
| "create-secret"
186-
| "delete-app"
187-
| "delete-secret"
188-
| false;
187+
mutatingResource: MutatingResource;
189188
deleteAppSecret: (id: string) => void;
190189
};
191190

192191
const OAuth2AppSecretsTable: FC<OAuth2AppSecretsTableProps> = ({
193192
secrets,
194193
generateAppSecret,
195194
isLoadingSecrets,
196-
isUpdating,
195+
mutatingResource,
197196
deleteAppSecret,
198197
}) => {
199198
return (
@@ -205,7 +204,7 @@ const OAuth2AppSecretsTable: FC<OAuth2AppSecretsTableProps> = ({
205204
>
206205
<h2>Client secrets</h2>
207206
<LoadingButton
208-
loading={isUpdating === "create-secret"}
207+
loading={mutatingResource.createSecret}
209208
type="submit"
210209
variant="contained"
211210
onClick={generateAppSecret}
@@ -239,7 +238,7 @@ const OAuth2AppSecretsTable: FC<OAuth2AppSecretsTableProps> = ({
239238
<OAuth2SecretRow
240239
key={secret.id}
241240
secret={secret}
242-
isUpdating={isUpdating}
241+
mutatingResource={mutatingResource}
243242
deleteAppSecret={deleteAppSecret}
244243
/>
245244
))}
@@ -253,18 +252,13 @@ const OAuth2AppSecretsTable: FC<OAuth2AppSecretsTableProps> = ({
253252
type OAuth2SecretRowProps = {
254253
secret: TypesGen.OAuth2AppSecret;
255254
deleteAppSecret: (id: string) => void;
256-
isUpdating:
257-
| "update-app"
258-
| "create-secret"
259-
| "delete-app"
260-
| "delete-secret"
261-
| false;
255+
mutatingResource: MutatingResource;
262256
};
263257

264258
const OAuth2SecretRow: FC<OAuth2SecretRowProps> = ({
265259
secret,
266260
deleteAppSecret,
267-
isUpdating,
261+
mutatingResource,
268262
}) => {
269263
const [showDelete, setShowDelete] = useState<boolean>(false);
270264

@@ -282,7 +276,7 @@ const OAuth2SecretRow: FC<OAuth2SecretRowProps> = ({
282276
onConfirm={() => deleteAppSecret(secret.id)}
283277
onClose={() => setShowDelete(false)}
284278
title="Delete OAuth2 client secret"
285-
confirmLoading={isUpdating === "delete-secret"}
279+
confirmLoading={mutatingResource.deleteSecret}
286280
confirmText="Delete"
287281
description={
288282
<>

0 commit comments

Comments
 (0)