Compare commits
3 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
98a9c6a0a3 | |
|
|
016f948610 | |
|
|
db6db2ed36 |
|
|
@ -0,0 +1,9 @@
|
||||||
|
import React from "react";
|
||||||
|
import { ConfigProviderProps } from "./types";
|
||||||
|
import { ConfigContext } from "./context";
|
||||||
|
|
||||||
|
const ConfigProvider: React.FC<ConfigProviderProps> = ({ children, t = (v) => v }) => {
|
||||||
|
return <ConfigContext.Provider value={{ t }}>{children}</ConfigContext.Provider>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ConfigProvider;
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
import React from "react";
|
||||||
|
import { ConfigProviderProps } from "./types";
|
||||||
|
|
||||||
|
export const ConfigContext = React.createContext<ConfigProviderProps>({
|
||||||
|
t: (val) => val,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default ConfigContext;
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
export { default as ConfigProvider } from "./ConfigProvider";
|
||||||
|
export type { ConfigProviderProps } from "./types";
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { ReactText } from "react";
|
||||||
|
|
||||||
|
type ContextData = {
|
||||||
|
[key: string]: ReactText;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface ConfigProviderProps {
|
||||||
|
t: (key: string, data?: ContextData) => string;
|
||||||
|
}
|
||||||
|
|
@ -30,6 +30,7 @@ export * from "./components/TabMenu";
|
||||||
export * from "./components/Tag";
|
export * from "./components/Tag";
|
||||||
export * from "./components/Text";
|
export * from "./components/Text";
|
||||||
export * from "./components/Toggle";
|
export * from "./components/Toggle";
|
||||||
|
export * from "./components/ConfigProvider";
|
||||||
|
|
||||||
// Hooks
|
// Hooks
|
||||||
export * from "./hooks";
|
export * from "./hooks";
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,7 @@ const Menu: React.FC<NavProps> = ({
|
||||||
links,
|
links,
|
||||||
profile,
|
profile,
|
||||||
children,
|
children,
|
||||||
|
inviteUrl,
|
||||||
}) => {
|
}) => {
|
||||||
const { isXl } = useMatchBreakpoints();
|
const { isXl } = useMatchBreakpoints();
|
||||||
const isMobile = isXl === false;
|
const isMobile = isXl === false;
|
||||||
|
|
@ -124,7 +125,7 @@ const Menu: React.FC<NavProps> = ({
|
||||||
/>
|
/>
|
||||||
{!!login && !!logout && (
|
{!!login && !!logout && (
|
||||||
<Flex>
|
<Flex>
|
||||||
<UserBlock account={account} login={login} logout={logout} />
|
<UserBlock account={account} inviteUrl={inviteUrl} login={login} logout={logout} />
|
||||||
{profile && <Avatar profile={profile} />}
|
{profile && <Avatar profile={profile} />}
|
||||||
</Flex>
|
</Flex>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
import React from "react";
|
||||||
|
import Text from "../../../components/Text/Text";
|
||||||
|
import { Modal } from "../../Modal";
|
||||||
|
import { CopyToClipboard } from "../../WalletModal";
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
inviteUrl: string;
|
||||||
|
onDismiss?: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const InviteModal: React.FC<Props> = ({ inviteUrl, onDismiss }) => (
|
||||||
|
<Modal title="Invite" onDismiss={onDismiss}>
|
||||||
|
<CopyToClipboard toCopy={inviteUrl}>
|
||||||
|
<Text fontSize="20px" bold style={{ whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }}>
|
||||||
|
{inviteUrl}
|
||||||
|
</Text>
|
||||||
|
</CopyToClipboard>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default InviteModal;
|
||||||
|
|
@ -1,19 +1,34 @@
|
||||||
import React from "react";
|
import React, { useContext } from "react";
|
||||||
import Button from "../../../components/Button/Button";
|
import Button from "../../../components/Button/Button";
|
||||||
|
import { useModal } from "../../Modal";
|
||||||
|
import InviteModal from "./InviteModal";
|
||||||
import { useWalletModal } from "../../WalletModal";
|
import { useWalletModal } from "../../WalletModal";
|
||||||
import { Login } from "../../WalletModal/types";
|
import { Login } from "../../WalletModal/types";
|
||||||
|
import { ConfigContext } from "../../../components/ConfigProvider/context";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
account?: string;
|
account?: string;
|
||||||
|
inviteUrl: string;
|
||||||
login: Login;
|
login: Login;
|
||||||
logout: () => void;
|
logout: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const UserBlock: React.FC<Props> = ({ account, login, logout }) => {
|
const UserBlock: React.FC<Props> = ({ account, login, logout, inviteUrl }) => {
|
||||||
|
const { t } = useContext(ConfigContext);
|
||||||
const { onPresentConnectModal, onPresentAccountModal } = useWalletModal(login, logout, account);
|
const { onPresentConnectModal, onPresentAccountModal } = useWalletModal(login, logout, account);
|
||||||
|
const [onPresentInviteModal] = useModal(<InviteModal inviteUrl={inviteUrl} />);
|
||||||
const accountEllipsis = account ? `${account.substring(0, 4)}...${account.substring(account.length - 4)}` : null;
|
const accountEllipsis = account ? `${account.substring(0, 4)}...${account.substring(account.length - 4)}` : null;
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
<Button
|
||||||
|
scale="sm"
|
||||||
|
mr={10}
|
||||||
|
onClick={() => {
|
||||||
|
onPresentInviteModal();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t("Invite")}
|
||||||
|
</Button>
|
||||||
{account ? (
|
{account ? (
|
||||||
<Button
|
<Button
|
||||||
scale="sm"
|
scale="sm"
|
||||||
|
|
@ -31,7 +46,7 @@ const UserBlock: React.FC<Props> = ({ account, login, logout }) => {
|
||||||
onPresentConnectModal();
|
onPresentConnectModal();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
Connect
|
{t("Connect")}
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,7 @@ export interface PanelProps {
|
||||||
|
|
||||||
export interface NavProps extends PanelProps {
|
export interface NavProps extends PanelProps {
|
||||||
account?: string;
|
account?: string;
|
||||||
|
inviteUrl: string;
|
||||||
login?: Login;
|
login?: Login;
|
||||||
profile?: Profile;
|
profile?: Profile;
|
||||||
logout?: () => void;
|
logout?: () => void;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
export { default as useWalletModal } from "./useWalletModal";
|
export { default as useWalletModal } from "./useWalletModal";
|
||||||
export { connectorLocalStorageKey } from "./config";
|
export { connectorLocalStorageKey } from "./config";
|
||||||
|
export { default as CopyToClipboard } from "./CopyToClipboard";
|
||||||
export { ConnectorNames } from "./types";
|
export { ConnectorNames } from "./types";
|
||||||
export type { Login } from "./types";
|
export type { Login } from "./types";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue