1import create from 'zustand';
2import { PendingTransaction } from '@urbit/roller-api';
4import { HOUR } from 'lib/utils/roller';
5import { Invite, Invites } from 'lib/types/Invite';
6import Point, { Points, Relationship } from 'lib/types/Point';
7import { toL1Details } from 'lib/utils/point';
9export const EMPTY_POINT = new Point(-1, Relationship.own, toL1Details({}), '');
11export interface RollerStore {
12 nextBatchTime: number;
13 pendingTransactions: PendingTransaction[];
18 recentlyCompleted: number;
19 inviteGeneratingNum: number;
20 setNextBatchTime: (nextBatchTime: number) => void;
21 setPendingTransactions: (pendingTransactions: PendingTransaction[]) => void;
22 setPoint: (point: number) => void;
23 setPoints: (points: Points) => void;
24 setInvites: (points: number, invites: Invite[]) => void;
25 setInviteGeneratingNum: (numGenerating: number) => void;
26 updateInvite: (point: number, invite: Invite) => void;
29export const useRollerStore = create<RollerStore>(set => ({
30 nextBatchTime: new Date().getTime() + HOUR,
31 pendingTransactions: [],
37 inviteGeneratingNum: 0,
38 setNextBatchTime: (nextBatchTime: number) => set(() => ({ nextBatchTime })),
39 setPendingTransactions: (pendingTransactions: PendingTransaction[]) =>
41 const oldPending = state.pendingTransactions.length;
42 if (oldPending > 0 && pendingTransactions.length === 0) {
46 recentlyCompleted: oldPending,
49 return { ...state, pendingTransactions };
51 setPoint: (point: number) =>
52 set(state => ({ point: state.points[point] || EMPTY_POINT })),
53 setPoints: (points: Points) =>
54 set(() => ({ points, pointList: Object.values(points) })),
55 setInvites: (point: number, invites: Invite[]) =>
57 const newInvites: Invites = {};
58 newInvites[point] = invites;
59 return { invites: Object.assign(state.invites, newInvites) };
61 setInviteGeneratingNum: (inviteGeneratingNum: number) =>
62 set(() => ({ inviteGeneratingNum })),
63 updateInvite: (point: number, invite: Invite) =>
65 const newInvites: Invites = {};
66 newInvites[point] = state.invites[point]?.map(i =>
67 i.planet === invite.planet ? invite : i
69 return { invites: Object.assign(state.invites, newInvites) };
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list