on master help sign in
invites: only add after we verify ownership so count is more stable
commit807883b6eec424739c60d5310533d49133a8e7cd authorHunter Miller <hunter@thisdot.co> dateThu 10 Feb 2022, 17:35 (5 years ago) parent3628fc5
3 files changed+26−19
src/lib/useRoller.ts+13−15 src/store/rollerStore.ts+12 src/views/Invite/Cohort.tsx+1−4
src/lib/useRoller.ts+13−15
@@ -1,4 +1,4 @@
1−import { useCallback, useEffect, useMemo, useState } from 'react';
1+import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
22import * as azimuth from 'azimuth-js';
33import * as need from 'lib/need';
44import SecureLS from 'secure-ls';
@@ -92,13 +92,12 @@ export default function useRoller() {
9292 const { setNextRoll } = useTimerStore();
9393
9494 const {
95− invitesLoading,
9695 nextBatchTime,
9796 point,
9897 points,
9998 pointList,
10099 nextQuotaTime,
101− removeInvite,
100+ addInvite,
102101 setNextBatchTime,
103102 setNextQuotaTime,
104103 setPendingTransactions,
@@ -107,11 +106,11 @@ export default function useRoller() {
107106 setInvitesLoading,
108107 setModalText,
109108 setPoints,
110− updateInvite,
111109 updatePoint,
112110 storePendingL1Txn,
113111 deletePendingL1Txn,
114112 } = useRollerStore();
113+ const generatingInvites = useRef(false);
115114 const [config, setConfig] = useState<Config | null>(null);
116115
117116 const options: Options = useMemo(() => {
@@ -360,10 +359,11 @@ export default function useRoller() {
360359 };
361360
362361 const getInvites = useCallback(async () => {
363− if (invitesLoading) {
362+ if (generatingInvites.current) {
364363 return;
365364 }
366365
366+ generatingInvites.current = true;
367367 try {
368368 setInvitesLoading(true);
369369 const curPoint: number = Number(need.point(pointCursor));
@@ -397,10 +397,7 @@ export default function useRoller() {
397397 .filter((p: number) => !pendingSpawns.has(p))
398398 .sort();
399399
400− setInvites(
401− curPoint,
402− invitePlanets.map(p => inviteTemplate(p))
403− );
400+ setInvites(curPoint, []);
404401
405402 const newInvites: Invite[] = [];
406403 // Iterate over all of the stored invites, generating wallet info as necessary
@@ -422,23 +419,23 @@ export default function useRoller() {
422419 planetInfo.ownership?.owner?.address &&
423420 planetInfo.dominion === POINT_DOMINIONS.L2
424421 ) {
422+ addInvite(curPoint, invite);
425423 newInvites.push(invite);
426− updateInvite(curPoint, invite);
427− } else {
428− removeInvite(curPoint, invite.planet);
429424 }
430425
431426 if (storedInvite) {
432427 setStoredInvite(ls, invite);
433428 }
434429 }
435− setInvites(curPoint, newInvites);
430+
436431 setInvitesLoading(false);
437432 return newInvites;
438433 }
439434 } catch (error) {
440435 console.warn('ERROR GETTING INVITES', error);
441436 }
437+
438+ generatingInvites.current = false;
442439 }, [
443440 api,
444441 authToken,
@@ -447,12 +444,11 @@ export default function useRoller() {
447444 ls,
448445 point,
449446 pointList,
450− removeInvite,
447+ addInvite,
451448 setInvites,
452449 setInvitesLoading,
453450 setInviteGeneratingNum,
454451 setPendingTransactions,
455− updateInvite,
456452 ]);
457453
458454 const generateInviteCodes = useCallback(
@@ -571,6 +567,7 @@ export default function useRoller() {
571567 }
572568
573569 setStoredInvites(ls, invites);
570+ console.log('getting invites from code generation');
574571 getInvites();
575572 showNotification(
576573 `Your invite${invites.length > 1 ? 's have' : ' has'} been generated!`
@@ -1053,6 +1050,7 @@ export default function useRoller() {
10531050
10541051 setTimeout(() => {
10551052 if (!point.isDefault) {
1053+ console.log('getting invites from batch time');
10561054 getInvites(); // This will also get pending txns
10571055 }
10581056 }, TEN_SECONDS); // Should this be more like a minute?
src/store/rollerStore.ts+12
@@ -36,6 +36,7 @@ export interface RollerStore {
3636 inviteGeneratingNum: number;
3737 invitesLoading: boolean;
3838 ethBalance: BN;
39+ addInvite: (point: number, invite: Invite) => void;
3940 setLoading: (loading: boolean) => void;
4041 removeInvite: (point: number, planet: number) => void;
4142 setInvites: (points: number, invites: Invite[]) => void;
@@ -95,6 +96,17 @@ export const useRollerStore = create<RollerStore>(set => ({
9596 }),
9697 setInviteGeneratingNum: (inviteGeneratingNum: number) =>
9798 set(() => ({ inviteGeneratingNum })),
99+ addInvite: (point: number, invite: Invite) => {
100+ set(state => {
101+ const newInvites: Invites = {};
102+ const invites = state.invites[point];
103+
104+ if (!invites.find(inv => inv.planet === invite.planet)) {
105+ newInvites[point] = [...invites, invite];
106+ }
107+ return { invites: Object.assign(state.invites, newInvites) };
108+ });
109+ },
98110 updateInvite: (point: number, invite: Invite) =>
99111 set(state => {
100112 const newInvites: Invites = {};
src/views/Invite/Cohort.tsx+1−4
@@ -98,10 +98,7 @@ export default function InviteCohort() {
9898 const [page, setPage] = useState(0);
9999
100100 const { construct, unconstruct, completed, bind } = useIssueChild();
101− const invitePoints: Invite[] = useMemo(() => invites[point.value] || [], [
102− invites,
103− point,
104− ]);
101+ const invitePoints = invites[point.value];
105102
106103 // Set up the invite spawn if on L1
107104 useEffect(() => {