From 626f70c57687cc4138a63948563cd165a7d5472f Mon Sep 17 00:00:00 2001
From: Maria Rushkova <66270386+mrushkova@users.noreply.github.com>
Date: Mon, 3 Jan 2022 14:52:01 +0100
Subject: [PATCH] Add token requirements (#165)
---
packages/react-chat/src/components/Chat.tsx | 3 +-
.../src/components/Chat/ChatBody.tsx | 131 +++++++++++-------
.../src/components/Form/TokenRequirement.tsx | 131 ++++++++++++++++++
.../src/components/Icons/EthereumLogo.tsx | 38 +++++
.../src/components/Icons/MarkerdaoLogo.tsx | 33 +++++
.../src/components/Icons/StatusIcon.tsx | 24 ++++
.../components/UserCreation/UserCreation.tsx | 14 +-
packages/react-chat/src/styles/themes.ts | 5 +
8 files changed, 325 insertions(+), 54 deletions(-)
create mode 100644 packages/react-chat/src/components/Form/TokenRequirement.tsx
create mode 100644 packages/react-chat/src/components/Icons/EthereumLogo.tsx
create mode 100644 packages/react-chat/src/components/Icons/MarkerdaoLogo.tsx
create mode 100644 packages/react-chat/src/components/Icons/StatusIcon.tsx
diff --git a/packages/react-chat/src/components/Chat.tsx b/packages/react-chat/src/components/Chat.tsx
index 3c590f5..4f99c0f 100644
--- a/packages/react-chat/src/components/Chat.tsx
+++ b/packages/react-chat/src/components/Chat.tsx
@@ -46,13 +46,14 @@ export function Chat() {
{!narrow && (
- {identity ? : }
+ {identity ? : }
)}
{state === ChatState.ChatBody && (
setShowMembers(!showMembers)}
showMembers={showMembers}
+ permission={true}
/>
)}
{showMembers && !narrow && state === ChatState.ChatBody && }
diff --git a/packages/react-chat/src/components/Chat/ChatBody.tsx b/packages/react-chat/src/components/Chat/ChatBody.tsx
index e958d78..0ca2ba6 100644
--- a/packages/react-chat/src/components/Chat/ChatBody.tsx
+++ b/packages/react-chat/src/components/Chat/ChatBody.tsx
@@ -4,6 +4,7 @@ import styled from "styled-components";
import { useMessengerContext } from "../../contexts/messengerProvider";
import { useNarrow } from "../../contexts/narrowProvider";
import { Reply } from "../../hooks/useReply";
+import { TokenRequirement } from "../Form/TokenRequirement";
import { MessagesList } from "../Messages/MessagesList";
import { NarrowChannels } from "../NarrowMode/NarrowChannels";
import { NarrowMembers } from "../NarrowMode/NarrowMembers";
@@ -22,9 +23,10 @@ export enum ChatBodyState {
interface ChatBodyProps {
onClick: () => void;
showMembers: boolean;
+ permission: boolean;
}
-export function ChatBody({ onClick, showMembers }: ChatBodyProps) {
+export function ChatBody({ onClick, showMembers, permission }: ChatBodyProps) {
const { messenger, activeChannel, communityData } = useMessengerContext();
const narrow = useNarrow();
@@ -50,67 +52,98 @@ export function ChatBody({ onClick, showMembers }: ChatBodyProps) {
const [reply, setReply] = useState(undefined);
return (
-
- {editGroup && communityData ? (
-
- ) : (
-
- )}
- {messenger ? (
- <>
- {showState === ChatBodyState.Chat && (
- <>
- {messenger && communityData ? (
-
- ) : (
-
- )}
-
- >
- )}
+
+
+ {editGroup && communityData ? (
+
+ ) : (
+
+ )}
+ {messenger ? (
+ <>
+ {showState === ChatBodyState.Chat && (
+ <>
+ {messenger && communityData ? (
+
+ ) : (
+
+ )}
+
+ >
+ )}
- {showState === ChatBodyState.Channels && (
- switchShowState(ChatBodyState.Channels)}
- />
- )}
- {showState === ChatBodyState.Members && (
-
- switchShowState(ChatBodyState.Members)
- }
- />
- )}
- >
- ) : (
- <>
-
-
- >
+ {showState === ChatBodyState.Channels && (
+ switchShowState(ChatBodyState.Channels)}
+ />
+ )}
+ {showState === ChatBodyState.Members && (
+
+ switchShowState(ChatBodyState.Members)
+ }
+ />
+ )}
+ >
+ ) : (
+ <>
+
+
+ >
+ )}
+
+ {!permission && (
+
+
+
)}
-
+
);
}
-const ChatBodyWrapper = styled.div`
+const Wrapper = styled.div`
width: 61%;
display: flex;
flex-direction: column;
flex: 1;
height: 100%;
background: ${({ theme }) => theme.bodyBackgroundColor};
+ position: relative;
&.narrow {
width: 100%;
}
`;
+
+const ChatBodyWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ background: ${({ theme }) => theme.bodyBackgroundColor};
+`;
+
+const BluredWrapper = styled.div`
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: flex-end;
+ justify-content: center;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ background: ${({ theme }) => theme.bodyBackgroundGradient};
+ backdrop-filter: blur(4px);
+ z-index: 2;
+`;
diff --git a/packages/react-chat/src/components/Form/TokenRequirement.tsx b/packages/react-chat/src/components/Form/TokenRequirement.tsx
new file mode 100644
index 0000000..de308ad
--- /dev/null
+++ b/packages/react-chat/src/components/Form/TokenRequirement.tsx
@@ -0,0 +1,131 @@
+import React from "react";
+import styled from "styled-components";
+
+import { useMessengerContext } from "../../contexts/messengerProvider";
+import { textMediumStyles } from "../Text";
+
+const communityRequirements = {
+ requirements: [
+ {
+ name: "STN",
+ amount: 10,
+ logo: "https://status.im/img/logo.svg",
+ },
+ ],
+ alternativeRequirements: [
+ {
+ name: "ETH",
+ amount: 1,
+ logo: "https://ethereum.org/static/a110735dade3f354a46fc2446cd52476/db4de/eth-home-icon.webp",
+ },
+ {
+ name: "MKR",
+ amount: 10,
+ logo: "https://cryptologos.cc/logos/maker-mkr-logo.svg?v=017",
+ },
+ ],
+};
+
+export function TokenRequirement() {
+ const { communityData } = useMessengerContext();
+ return (
+
+
+ To join {communityData?.name} community chat you need to
+ hold:
+
+
+ {communityRequirements.requirements.map((req) => (
+
+
+
+ {req.amount} {req.name}{" "}
+
+
+ ))}
+
+ {communityRequirements.alternativeRequirements && or}
+
+ {communityRequirements.alternativeRequirements.map((req) => (
+
+
+
+ {req.amount} {req.name}{" "}
+
+
+ ))}
+
+
+ );
+}
+
+const Wrapper = styled.div`
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ height: 50%;
+`;
+
+const Text = styled.p`
+ color: ${({ theme }) => theme.primary};
+ text-align: center;
+ margin-bottom: 16px;
+
+ & > span {
+ font-weight: 700;
+ }
+
+ ${textMediumStyles}
+`;
+
+const Requirement = styled.div`
+ display: flex;
+ align-items: center;
+ border-radius: 16px;
+ padding: 2px 12px 2px 2px;
+ background: ${({ theme }) => theme.buttonBg};
+ color: ${({ theme }) => theme.tertiary};
+
+ &.denial {
+ background: ${({ theme }) => theme.buttonNoBgHover};
+ color: ${({ theme }) => theme.redColor};
+ }
+
+ & + & {
+ margin-left: 18px;
+ }
+`;
+
+const Amount = styled.p`
+ font-weight: 500;
+ text-transform: uppercase;
+ margin-left: 6px;
+
+ ${textMediumStyles}
+`;
+
+const Row = styled.div`
+ display: flex;
+ align-items: center;
+ margin-bottom: 16px;
+`;
+
+const Logo = styled.div`
+ width: 28px;
+ height: 28px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ border-radius: 50%;
+ background-size: cover;
+ background-repeat: no-repeat;
+`;
diff --git a/packages/react-chat/src/components/Icons/EthereumLogo.tsx b/packages/react-chat/src/components/Icons/EthereumLogo.tsx
new file mode 100644
index 0000000..0c0364d
--- /dev/null
+++ b/packages/react-chat/src/components/Icons/EthereumLogo.tsx
@@ -0,0 +1,38 @@
+import React from "react";
+
+export const EthereumLogo = () => (
+
+);
diff --git a/packages/react-chat/src/components/Icons/MarkerdaoLogo.tsx b/packages/react-chat/src/components/Icons/MarkerdaoLogo.tsx
new file mode 100644
index 0000000..1cb3993
--- /dev/null
+++ b/packages/react-chat/src/components/Icons/MarkerdaoLogo.tsx
@@ -0,0 +1,33 @@
+import React from "react";
+
+export const MarkerdaoLogo = () => (
+
+);
diff --git a/packages/react-chat/src/components/Icons/StatusIcon.tsx b/packages/react-chat/src/components/Icons/StatusIcon.tsx
new file mode 100644
index 0000000..69b6e22
--- /dev/null
+++ b/packages/react-chat/src/components/Icons/StatusIcon.tsx
@@ -0,0 +1,24 @@
+import React from "react";
+
+export const StatusIcon = () => (
+
+);
diff --git a/packages/react-chat/src/components/UserCreation/UserCreation.tsx b/packages/react-chat/src/components/UserCreation/UserCreation.tsx
index ec01387..252b9e4 100644
--- a/packages/react-chat/src/components/UserCreation/UserCreation.tsx
+++ b/packages/react-chat/src/components/UserCreation/UserCreation.tsx
@@ -9,7 +9,11 @@ import { UserCreationModalName } from "../Modals/UserCreationModal";
import { WalletModalName } from "../Modals/WalletModal";
import { textSmallStyles } from "../Text";
-export function UserCreation() {
+interface UserCreationProps {
+ permission: boolean;
+}
+
+export function UserCreation({ permission }: UserCreationProps) {
const { setModal } = useModal(UserCreationModalName);
const { setModal: setStatusModal } = useModal(StatusModalName);
const { setModal: setWalletModal } = useModal(WalletModalName);
@@ -24,9 +28,11 @@ export function UserCreation() {
setWalletModal(true)}>
Connect Ethereum Wallet
- setModal(true)}>
- Use a throwaway account
-
+ {permission && (
+ setModal(true)}>
+ Use a throwaway account
+
+ )}
);
}
diff --git a/packages/react-chat/src/styles/themes.ts b/packages/react-chat/src/styles/themes.ts
index f32e834..4183b79 100644
--- a/packages/react-chat/src/styles/themes.ts
+++ b/packages/react-chat/src/styles/themes.ts
@@ -4,6 +4,7 @@ export type Theme = {
tertiary: string;
bodyBackgroundColor: string;
sectionBackgroundColor: string;
+ bodyBackgroundGradient: string;
guestNameColor: string;
iconColor: string;
iconUserColor: string;
@@ -34,6 +35,8 @@ export const lightTheme: Theme = {
tertiary: "#4360DF",
bodyBackgroundColor: "#fff",
sectionBackgroundColor: "#F6F8FA",
+ bodyBackgroundGradient:
+ "linear-gradient(0deg, #FFFFFF 50%, rgba(255, 255, 255, 0) 102.57%)",
guestNameColor: "#887AF9",
iconColor: "#D37EF4",
iconUserColor: "#717199",
@@ -65,6 +68,8 @@ export const darkTheme: Theme = {
tertiary: "#88B0FF",
bodyBackgroundColor: "#000",
sectionBackgroundColor: "#252525",
+ bodyBackgroundGradient:
+ "linear-gradient(0deg, #000 50%, rgba(255, 255, 255, 0) 102.57%)",
guestNameColor: "#887AF9",
iconColor: "#D37EF4",
iconUserColor: "#717199",