Skip to content

Commit 7e8243e

Browse files
committed
"Skip Confirmation For All Readonly Commands" into Settings
1 parent 7fe7391 commit 7e8243e

File tree

3 files changed

+48
-10
lines changed

3 files changed

+48
-10
lines changed

packages/gui/src/components/settings/SettingsIntegration.tsx

+32
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useLocalStorage, useGetLoggedInFingerprintQuery } from '@chia-network/api-react';
12
import { Flex, MenuItem, SettingsHR, SettingsSection, SettingsTitle, SettingsText } from '@chia-network/core';
23
import { t, Trans } from '@lingui/macro';
34
import {
@@ -45,6 +46,9 @@ export default function SettingsIntegration() {
4546
useWalletConnectPairs();
4647

4748
const pairs = get();
49+
const { data: fingerprint } = useGetLoggedInFingerprintQuery();
50+
51+
const [bypassReadonlyCommands, setBypassReadonlyCommands] = useLocalStorage<any>('bypass-readonly-commands', {});
4852

4953
const refreshBypassCommands = React.useCallback(() => {
5054
if (selectedPair.current) {
@@ -131,6 +135,9 @@ export default function SettingsIntegration() {
131135
}
132136
}, [topic, pairs, refreshBypassCommands]);
133137

138+
const readonlySkipValue =
139+
bypassReadonlyCommands && topic && fingerprint ? bypassReadonlyCommands[topic][fingerprint] : false;
140+
134141
return (
135142
<Grid container style={{ maxWidth: '624px' }} gap={3}>
136143
<Grid item>
@@ -334,6 +341,31 @@ export default function SettingsIntegration() {
334341
</Box>
335342
)}
336343
</Flex>
344+
<Box {...borderStyle}>
345+
<Typography variant="h6">
346+
<Trans>Skip Confirmation For All Readonly Commands</Trans>
347+
<Grid item container xs marginTop="20px" marginRight="8px">
348+
<FormControl size="small">
349+
<Select
350+
value={readonlySkipValue}
351+
onChange={(evt: PointerEvent) => {
352+
setBypassReadonlyCommands((localBypassReadonlyCommands) => ({
353+
...localBypassReadonlyCommands,
354+
[topic]: { [fingerprint]: evt.target.value },
355+
}));
356+
}}
357+
>
358+
<MenuItem value>
359+
<Trans>Always Skip</Trans>
360+
</MenuItem>
361+
<MenuItem value={false} onClick={() => {}}>
362+
<Trans>Require Confirmation</Trans>
363+
</MenuItem>
364+
</Select>
365+
</FormControl>
366+
</Grid>
367+
</Typography>
368+
</Box>
337369

338370
{topic && commands.length > 0 && (
339371
<>

packages/gui/src/components/walletConnect/WalletConnectAddConnectionDialog.tsx

+11-3
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ export default function WalletConnectAddConnectionDialog(props: WalletConnectAdd
5151
const { onClose = () => {}, open = false } = props;
5252

5353
const [step, setStep] = useState<Step>(Step.CONNECT);
54-
const [bypassReadonlyCommands, toggleBypassReadonlyCommands] = useLocalStorage('bypass-readonly-commands', false);
54+
const [bypassReadonlyCommands, setBypassReadonlyCommands] = useLocalStorage<any>('bypass-readonly-commands', {});
55+
const [bypassCheckbox, toggleBypassCheckbox] = useState(false);
5556
const { pair, isLoading: isLoadingWallet } = useWalletConnectContext();
5657
const { data: keys, isLoading: isLoadingPublicKeys } = useGetKeysQuery({});
5758
const [sortedWallets] = usePrefs('sortedWallets', []);
@@ -119,6 +120,13 @@ export default function WalletConnectAddConnectionDialog(props: WalletConnectAdd
119120
}
120121

121122
const topic = await pair(uri, selectedFingerprints, mainnet);
123+
if (bypassCheckbox) {
124+
let skipReadOnlyObject = {};
125+
selectedFingerprints.forEach((f: number) => {
126+
skipReadOnlyObject = { ...skipReadOnlyObject, [f]: true };
127+
});
128+
setBypassReadonlyCommands({ ...bypassReadonlyCommands, [topic.toString()]: skipReadOnlyObject });
129+
}
122130
onClose(topic);
123131
}
124132

@@ -219,10 +227,10 @@ export default function WalletConnectAddConnectionDialog(props: WalletConnectAdd
219227
sx={{ cursor: 'pointer' }}
220228
alignItems="center"
221229
onClick={() => {
222-
toggleBypassReadonlyCommands(!bypassReadonlyCommands);
230+
toggleBypassCheckbox(!bypassCheckbox);
223231
}}
224232
>
225-
<Checkbox checked={bypassReadonlyCommands} disableRipple sx={{ paddingLeft: 0 }} />
233+
<Checkbox checked={bypassCheckbox} disableRipple sx={{ paddingLeft: 0 }} />
226234
<Typography variant="body2">
227235
<Trans>Bypass confirmation for all read-only commands</Trans>
228236
</Typography>

packages/gui/src/hooks/useWalletConnectCommand.tsx

+5-7
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export default function useWalletConnectCommand(options: UseWalletConnectCommand
8080

8181
const isLoading = isLoadingLoggedInFingerprint;
8282

83-
const [bypassReadonlyCommands] = useLocalStorage('bypass-readonly-commands', false);
83+
const [bypassReadonlyCommands] = useLocalStorage<any>('bypass-readonly-commands', {});
8484

8585
async function confirm(props: {
8686
topic: string;
@@ -141,8 +141,9 @@ export default function useWalletConnectCommand(options: UseWalletConnectCommand
141141

142142
const { fingerprint } = requestedParams;
143143

144+
const pair = getPairBySession(topic);
145+
const pairedTopic = pair?.topic!;
144146
if (command === 'showNotification') {
145-
const pair = getPairBySession(topic);
146147
if (!pair) {
147148
throw new Error('Invalid session topic');
148149
}
@@ -174,13 +175,10 @@ export default function useWalletConnectCommand(options: UseWalletConnectCommand
174175
values = newValues;
175176
}
176177

177-
const isReadOnly =
178-
['spend', 'cancel', 'create', 'transfer', 'send', 'take', 'add', 'set'].filter(
179-
(startsWith: string) => command.indexOf(startsWith) === 0
180-
).length === 0;
178+
const isReadOnlyEnabled = bypassReadonlyCommands?.[pairedTopic]?.[fingerprint];
181179

182180
const confirmed =
183-
(bypassReadonlyCommands && isReadOnly) ||
181+
(isReadOnlyEnabled && definition.bypassConfirm) ||
184182
(await confirm({
185183
topic,
186184
message:

0 commit comments

Comments
 (0)