on master help sign in
Merge pull request #1052 from pkova/master

accept-transfer: fix infinite render leading to roller request spam

commit74f0aa64bec602bc8cee08beb500505e82059a18 authortomholford <16504501+tomholford@users.noreply.github.com> dateTue 11 Oct 2022, 21:31 (4 years ago) parenta6af760736316b
9 files changed+28−24
src/lib/useRoller.ts+12−9 src/store/pointCache.js+2−1 src/views/AcceptTransfer.tsx+3−3 src/views/CancelTransfer.tsx+2−2 src/views/Point/MigrateL2.tsx+1−1 src/views/UrbitID/SetProxy.js+2−2 src/views/UrbitID/Transfer.tsx+2−2 src/views/UrbitOS/ChangeSponsor.tsx+2−2 src/views/UrbitOS/NetworkKeys.tsx+2−2
src/lib/useRoller.ts+12−9
@@ -44,7 +44,7 @@ import { useRollerOptions } from './useRollerOptions';
4444import { useTimerStore } from 'store/timerStore';
4545
4646interface UpdateParams {
47− point: number;
47+ point?: Point | number;
4848 message?: string;
4949 notify?: boolean;
5050 field?: PointField;
@@ -140,7 +140,7 @@ export default function useRoller() {
140140 }, [nextQuotaTime, point, setModalText]);
141141
142142 const initPoint = useCallback(
143− async (point: string | number) => {
143+ async (point: string | number): Promise<Point> => {
144144 const _wallet = wallet.getOrElse(null);
145145 const _contracts = contracts.getOrElse(null);
146146
@@ -211,21 +211,24 @@ export default function useRoller() {
211211 l1Txn,
212212 intervalTime = TEN_SECONDS,
213213 }: UpdateParams) => {
214+
215+
216+ const p = (typeof point === 'number' ? await initPoint(point) : point) as Point
217+
214218 if (l1Txn) storePendingL1Txn(l1Txn);
215219
216220 let interval: any;
217221 const check = async () => {
218− const updatedPoint = await initPoint(point);
219− const changedField = !points[point]
222+ const changedField = !points[p.value]
220223 ? 'newPoint'
221− : updatedPoint.getChangedField(points[point], field);
224+ : p.getChangedField(points[p.value], field);
222225
223226 if (isDevelopment) {
224− console.log(`CHECKING FOR ${changedField} UPDATES:`, updatedPoint);
227+ console.log(`CHECKING FOR ${changedField} UPDATES:`, p.patp);
225228 }
226229
227− if (!updatedPoint.isPlaceholder && changedField) {
228− updatePoint(updatedPoint);
230+ if (!p.isPlaceholder && changedField) {
231+ updatePoint(p);
229232 if (interval) {
230233 clearInterval(interval);
231234 }
@@ -233,7 +236,7 @@ export default function useRoller() {
233236 if (l1Txn) deletePendingL1Txn(l1Txn);
234237 if (notify) {
235238 showNotification(
236− `${message || getUpdatedPointMessage(updatedPoint, changedField)}`
239+ `${message || getUpdatedPointMessage(p, changedField)}`
237240 );
238241 }
239242 }
src/store/pointCache.js+2−1
@@ -1,5 +1,6 @@
11import React, { createContext, forwardRef, useContext } from 'react';
22
3+import useDeepEqualReference from 'lib/useDeepEqualReference';
34import usePointStore from './lib/usePointStore';
45
56export const PointCacheContext = createContext(null);
@@ -8,7 +9,7 @@ export function PointCacheProvider({ children }) {
89 const cache = usePointStore();
910
1011 return (
11− <PointCacheContext.Provider value={cache}>
12+ <PointCacheContext.Provider value={useDeepEqualReference(cache)}>
1213 {children}
1314 </PointCacheContext.Provider>
1415 );
src/views/AcceptTransfer.tsx+3−3
@@ -53,7 +53,7 @@ function useAcceptTransfer() {
5353 ),
5454 useCallback(
5555 () => Promise.all([syncExtras(_point), syncControlledPoints()]),
56− [_point, syncControlledPoints, syncExtras]
56+ [_point]
5757 ),
5858 GAS_LIMITS.TRANSFER
5959 );
@@ -89,7 +89,7 @@ export default function AcceptTransfer() {
8989 // Update this one
9090 if (completed) {
9191 checkForUpdates({
92− point: point.value,
92+ point: point,
9393 message: `${point.patp} has been transferred to you!`,
9494 l1Txn: {
9595 id: `accept-transfer-${point.value}`,
@@ -129,7 +129,7 @@ export default function AcceptTransfer() {
129129 transferring.current = true;
130130 await transferPoint(_address, reset);
131131 await checkForUpdates({
132− point: point.value,
132+ point: point,
133133 message: `${point.patp} has been transferred to you!`,
134134 });
135135
src/views/CancelTransfer.tsx+2−2
@@ -68,7 +68,7 @@ function AdminCancelTransfer() {
6868 useEffect(() => {
6969 if (completed) {
7070 checkForUpdates({
71− point: point.value,
71+ point: point,
7272 message: `${point.patp} transfer cancelled`,
7373 l1Txn: {
7474 id: `cancel-${point.value}`,
@@ -89,7 +89,7 @@ function AdminCancelTransfer() {
8989 const cancelTransfer = useCallback(async () => {
9090 await setProxyAddress('transfer', ETH_ZERO_ADDR);
9191 await checkForUpdates({
92− point: point.value,
92+ point: point,
9393 message: `${point.patp} transfer cancelled`,
9494 });
9595 goBack();
src/views/Point/MigrateL2.tsx+1−1
@@ -135,7 +135,7 @@ export default function MigrateL2() {
135135 : `${selectedPoint.patp}'s spawn proxy has been set to Layer 2!`;
136136
137137 checkForUpdates({
138− point: selectedPoint.value,
138+ point: selectedPoint,
139139 message,
140140 notify: true,
141141 field: PointField.layer,
src/views/UrbitID/SetProxy.js+2−2
@@ -165,7 +165,7 @@ export default function SetProxy() {
165165 await setProxyAddress(getL2ProxyName(data.proxyType), newAddress);
166166
167167 checkForUpdates({
168− point: point.value,
168+ point: point,
169169 message: `${point.patp}'s ${humanProxyType} proxy has been set!`,
170170 });
171171
@@ -191,7 +191,7 @@ export default function SetProxy() {
191191 useEffect(() => {
192192 if (completed) {
193193 checkForUpdates({
194− point: point.value,
194+ point: point,
195195 message: `${point.patp}'s ${humanProxyType} proxy has been set!`,
196196 l1Txn: {
197197 id: `${newAddress}-${point.value}`,
src/views/UrbitID/Transfer.tsx+2−2
@@ -80,7 +80,7 @@ export default function AdminTransfer() {
8080 // Update this one
8181 if (completed) {
8282 checkForUpdates({
83− point: point.value,
83+ point: point,
8484 message: `${point.patp}'s transfer proxy has been set!`,
8585 l1Txn: {
8686 id: `set-transfer-proxy-${point.value}`,
@@ -105,7 +105,7 @@ export default function AdminTransfer() {
105105 await setProxyAddress('transfer', owner);
106106 getPendingTransactions();
107107 checkForUpdates({
108− point: point.value,
108+ point: point,
109109 message: `${point.patp}'s transfer proxy has been set!`,
110110 });
111111 pop();
src/views/UrbitOS/ChangeSponsor.tsx+2−2
@@ -63,7 +63,7 @@ function ChangeSponsor({ onDone }: { onDone: Function }) {
6363 setLoading(true);
6464 await changeSponsor(newSponsor!);
6565 checkForUpdates({
66− point: point.value,
66+ point: point,
6767 message: `${point.patp} has requested ${ob.patp(
6868 newSponsor
6969 )} as a sponsor`,
@@ -210,7 +210,7 @@ function CurrentEscape({ onDone }: { onDone: Function }) {
210210 setLoading(true);
211211 await cancelEscape();
212212 checkForUpdates({
213− point: point.value,
213+ point: point,
214214 message: `${point.patp}'s sponsor change cancelled`,
215215 });
216216 setLoading(false);
src/views/UrbitOS/NetworkKeys.tsx+2−2
@@ -176,7 +176,7 @@ export default function UrbitOSNetworkKeys({
176176 useEffect(() => {
177177 if (completed) {
178178 checkForUpdates({
179− point: point.value,
179+ point: point,
180180 message: `${point.patp}'s Network Keys have been set!`,
181181 l1Txn: {
182182 id: `${point.keyRevisionNumber}-network-keys-${point.value}`,
@@ -252,7 +252,7 @@ export default function UrbitOSNetworkKeys({
252252 // we could inspect if there's a changeKeys in the local list of pending txs,...
253253 //
254254 checkForUpdates({
255− point: point.value,
255+ point: point,
256256 message: `${point.patp}'s Network Keys have been set!`,
257257 intervalTime: ONE_SECOND,
258258 });