Skip to content

Commit

Permalink
chore: add suspense + fullscreen loaders
Browse files Browse the repository at this point in the history
  • Loading branch information
alanrsoares committed Jan 18, 2024
1 parent 072ce67 commit a330297
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,29 @@ export const RecentTransactionsTable: FC<Props> = ({
setPage(0);
}, [contractMethod]);

const { data: txns, isLoading } = trpc.gmp.getRecentTransactions.useQuery({
contractMethod,
senderAddress,
pageSize: maxTransactions,
page,
});
const { data: txns, isLoading } = trpc.gmp.getRecentTransactions.useQuery(
{
contractMethod,
senderAddress,
pageSize: maxTransactions,
page,
},
{
suspense: true,
}
);

const { data: prevPageTxns } = trpc.gmp.getRecentTransactions.useQuery({
contractMethod,
senderAddress,
pageSize: maxTransactions,
page: page > 0 ? page - 1 : 0,
});
const { data: prevPageTxns } = trpc.gmp.getRecentTransactions.useQuery(
{
contractMethod,
senderAddress,
pageSize: maxTransactions,
page: page > 0 ? page - 1 : 0,
},
{
suspense: true,
}
);

const { data: nextPageTxns } = trpc.gmp.getRecentTransactions.useQuery({
contractMethod,
Expand Down
45 changes: 26 additions & 19 deletions apps/maestro/src/pages/recent-transactions/index.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Tabs } from "@axelarjs/ui";
import { invert } from "@axelarjs/utils";
import { Suspense } from "react";

import { useAccount } from "wagmi";

Expand Down Expand Up @@ -36,25 +37,31 @@ const RecentTransactionsPage = () => {
>
<Page.Title>My Recent Transactions</Page.Title>
<div className="flex-1 space-y-4">
<Tabs boxed>
{CONTRACT_METHODS.map((method) => (
<Tabs.Tab
key={method}
onClick={(e) => {
e.preventDefault();
setTab(REVERSE_TAB_MAP[method]);
}}
active={contractMethod === method}
>
{CONTRACT_METHODS_LABELS[method]}
</Tabs.Tab>
))}
</Tabs>
<RecentTransactionsTable
contractMethod={contractMethod}
senderAddress={address}
maxTransactions={20}
/>
<Suspense
fallback={
<Page.FullScreenLoading loadingMessage="loading recent transactions..." />
}
>
<Tabs boxed>
{CONTRACT_METHODS.map((method) => (
<Tabs.Tab
key={method}
onClick={(e) => {
e.preventDefault();
setTab(REVERSE_TAB_MAP[method]);
}}
active={contractMethod === method}
>
{CONTRACT_METHODS_LABELS[method]}
</Tabs.Tab>
))}
</Tabs>
<RecentTransactionsTable
contractMethod={contractMethod}
senderAddress={address}
maxTransactions={20}
/>
</Suspense>
</div>
</Page>
);
Expand Down
17 changes: 17 additions & 0 deletions apps/maestro/src/services/db/kv/MaestroKVClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,28 @@ export default class MaestroKVClient extends BaseMaestroKVClient {
return await this.kv.get<AccountStatus>(key);
}

async getAccounStatuses() {
const match = COLLECTION_KEYS.accountStatus("*" as `0x${string}`);
const [, keys] = await this.kv.scan(0, { match });
const values = await this.kv.mget<AccountStatus[]>(keys);

return keys.map((key, i) => ({
// extract account address from key (e.g. "accounts:0x1234:status" -> "0x1234")
accountAddress: key.split(":")[1] as `0x${string}`,
status: values[i],
}));
}

async getGlobalMessage() {
const key = COLLECTION_KEYS.globalMessage;
return await this.kv.hgetall<Message>(key);
}

async setGlobalMessage(message: Message) {
const key = COLLECTION_KEYS.globalMessage;
return await this.kv.hset(key, message);
}

async getAccountMessage(accountAddresss: `0x${string}`) {
const key = COLLECTION_KEYS.accountMessage(accountAddresss);
return await this.kv.hgetall<Message>(key);
Expand Down
26 changes: 15 additions & 11 deletions apps/maestro/src/ui/layouts/Page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -218,21 +218,25 @@ const Page = ({
>
{pageContent}
</Clamp>
{isLoading && (
<div className="absolute inset-0 grid place-items-center bg-black/20 backdrop-blur-sm">
<div className="grid place-items-center gap-12 text-center">
<GridLoader
color="var(--primary)"
className="animate-pulse [animation-duration:3s]"
/>
<span>{loadingMessage || "loading page data..."}</span>
</div>
</div>
)}
{isLoading && <FullScreenLoading loadingMessage={loadingMessage} />}
</>
);
};

export const FullScreenLoading = ({ loadingMessage = "" }) => (
<div className="absolute inset-0 grid place-items-center bg-black/20 backdrop-blur-sm">
<div className="grid place-items-center gap-12 text-center">
<GridLoader
color="var(--primary)"
className="animate-pulse [animation-duration:3s]"
/>
<span>{loadingMessage || "loading page data..."}</span>
</div>
</div>
);

export default Object.assign(Page, {
Title: tw.h1`text-2xl font-bold`,
Content: tw.div`flex-1 grid`,
FullScreenLoading,
});
6 changes: 5 additions & 1 deletion apps/maestro/src/ui/pages/InterchainTokensPage/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ const InterchainTokensPage = () => {
return (
<Page pageTitle="My Interchain Tokens">
<div className="flex flex-col gap-4">
<Suspense fallback={<div>Loading...</div>}>
<Suspense
fallback={
<Page.FullScreenLoading loadingMessage="loading interchain tokens..." />
}
>
<TokenList sessionAddress={session?.address} />
</Suspense>
</div>
Expand Down

0 comments on commit a330297

Please sign in to comment.