@mysten/dapp-kit
Version:
A collection of React hooks and components for interacting with the Sui blockchain and wallets.
46 lines (34 loc) • 1.08 kB
text/typescript
// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0
import type { SuiClientOptions } from '@mysten/sui/client';
import { useSuiClientContext } from './useSuiClient.js';
export type NetworkConfig<T extends object = object> = SuiClientOptions & {
variables?: T;
};
export function createNetworkConfig<
const T extends Record<string, Config>,
Config extends NetworkConfig<Variables> = T[keyof T],
Variables extends object = NonNullable<Config['variables']>,
>(networkConfig: T) {
function useNetworkConfig(): Config {
const { config } = useSuiClientContext();
if (!config) {
throw new Error('No network config found');
}
return config as T[keyof T];
}
function useNetworkVariables(): Variables {
const { variables } = useNetworkConfig();
return (variables ?? {}) as Variables;
}
function useNetworkVariable<K extends keyof Variables>(name: K): Variables[K] {
const variables = useNetworkVariables();
return variables[name];
}
return {
networkConfig,
useNetworkConfig,
useNetworkVariables,
useNetworkVariable,
};
}