Skip to content

Commit

Permalink
feat: create clients provider
Browse files Browse the repository at this point in the history
  • Loading branch information
tien committed Apr 4, 2022
1 parent 7f52502 commit a9ac2aa
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 8 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.vscode
.idea
.coverage.txt
frontend/node_modules
Expand Down
19 changes: 11 additions & 8 deletions app/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { shouldAllowFaucetFunding } from "@/hooks/useFaucet";
import OnboardingModal from "@/components/OnboardingModal";

import "./App.scss";
import { SifchainClientsProvider } from "./business/providers/SifchainClientsProvider";

// not currently working? - McCall
const hideRedundantUselessMetamaskErrors = () => {
Expand Down Expand Up @@ -122,14 +123,16 @@ export default defineComponent({

return () => (
<div class="min-h-screen">
<SideBar />
<router-view />
{shouldShowOnboardingModal.value && (
<OnboardingModal onClose={onCloseOnboardingModal} />
)}
<Notifications />
<EnvAlert />
<Flags />
<SifchainClientsProvider>
<SideBar />
<router-view />
{shouldShowOnboardingModal.value && (
<OnboardingModal onClose={onCloseOnboardingModal} />
)}
<Notifications />
<EnvAlert />
<Flags />
</SifchainClientsProvider>
</div>
);
},
Expand Down
72 changes: 72 additions & 0 deletions app/src/business/providers/SifchainClientsProvider.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { useCore } from "@/hooks/useCore";
import { createQueryClient, createSigningClient } from "@sifchain/sdk";
import {
defineComponent,
inject,
InjectionKey,
onMounted,
provide,
reactive,
} from "vue";

type QueryClients = Awaited<ReturnType<typeof createQueryClient>>;

type QueryClientsState =
| ({
queryClientStatus: "fulfilled";
} & QueryClients)
| { queryClientStatus?: "pending" | "rejected" };

type SigningClient = Awaited<ReturnType<typeof createSigningClient>>;

type SigningClientState =
| {
signingClientStatus: "fulfilled";
signingClient: SigningClient;
}
| {
signingClientStatus?: "pending" | "rejected";
};

export type ClientsState = QueryClientsState & SigningClientState;

export const sifchainClientsSymbol: InjectionKey<ClientsState> =
Symbol("sifchainClients");

export const SifchainClientsProvider = defineComponent((_, { slots }) => {
const state = reactive<ClientsState>({
queryClientStatus: undefined,
signingClientStatus: undefined,
});

const { config, services } = useCore();

onMounted(() => {
state.queryClientStatus = "pending";
const queryClientPromise = createQueryClient(config.sifRpcUrl)
.then((x) => {
Object.assign(state, { ...x, queryClientStatus: "fulfilled" });
})
.catch(() => (state.queryClientStatus = "rejected"));

state.signingClientStatus = "pending";
const signingClientPromise = services.wallet.keplrProvider
.getSendingSigner(services.chains.nativeChain)
.then((x) => createSigningClient(config.sifRpcUrl, x))
.then((x) =>
Object.assign(state, {
signingClient: x,
signingClientStatus: "fulfilled",
}),
)
.catch(() => (state.signingClientStatus = "rejected"));

return Promise.all([queryClientPromise, signingClientPromise]);
});

provide(sifchainClientsSymbol, state);

return () => slots.default?.();
});

export const injectSifchainClients = () => inject(sifchainClientsSymbol);

0 comments on commit a9ac2aa

Please sign in to comment.