mirror of
https://github.com/status-im/status-web.git
synced 2025-03-03 05:31:08 +00:00
Refactor channel data (#114)
This commit is contained in:
parent
61c27f0721
commit
ee91965c32
@ -1,31 +1,32 @@
|
|||||||
import React, { useEffect } from "react";
|
import React, { useEffect, useMemo } from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
import { useMessengerContext } from "../../contexts/messengerProvider";
|
import { useMessengerContext } from "../../contexts/messengerProvider";
|
||||||
import { ChannelData } from "../../models/ChannelData";
|
|
||||||
import { EditIcon } from "../Icons/EditIcon";
|
import { EditIcon } from "../Icons/EditIcon";
|
||||||
|
|
||||||
import { Channel } from "./Channel";
|
import { Channel } from "./Channel";
|
||||||
|
|
||||||
interface ChannelsProps {
|
interface ChannelsProps {
|
||||||
onCommunityClick: (val: ChannelData) => void;
|
|
||||||
activeChannelId: string;
|
|
||||||
channels: ChannelData[];
|
|
||||||
membersList: string[];
|
membersList: string[];
|
||||||
groupList: string[][];
|
groupList: string[][];
|
||||||
setCreateChat: (val: boolean) => void;
|
setCreateChat: (val: boolean) => void;
|
||||||
|
onCommunityClick?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Channels({
|
export function Channels({
|
||||||
onCommunityClick,
|
|
||||||
activeChannelId,
|
|
||||||
channels,
|
|
||||||
membersList,
|
membersList,
|
||||||
groupList,
|
groupList,
|
||||||
setCreateChat,
|
setCreateChat,
|
||||||
|
onCommunityClick,
|
||||||
}: ChannelsProps) {
|
}: ChannelsProps) {
|
||||||
const { clearNotifications, notifications } = useMessengerContext();
|
const {
|
||||||
|
clearNotifications,
|
||||||
|
notifications,
|
||||||
|
activeChannel,
|
||||||
|
setActiveChannel,
|
||||||
|
channels,
|
||||||
|
} = useMessengerContext();
|
||||||
|
const activeChannelId = useMemo(() => activeChannel.id, [activeChannel]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const channel = channels.find((channel) => channel.id === activeChannelId);
|
const channel = channels.find((channel) => channel.id === activeChannelId);
|
||||||
if (channel) {
|
if (channel) {
|
||||||
@ -49,7 +50,10 @@ export function Channels({
|
|||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
onCommunityClick(channel);
|
setActiveChannel(channel);
|
||||||
|
if (onCommunityClick) {
|
||||||
|
onCommunityClick();
|
||||||
|
}
|
||||||
setCreateChat(false);
|
setCreateChat(false);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@ -75,11 +79,14 @@ export function Channels({
|
|||||||
isActive={group.join("") === activeChannelId}
|
isActive={group.join("") === activeChannelId}
|
||||||
isMuted={false}
|
isMuted={false}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
onCommunityClick({
|
setActiveChannel({
|
||||||
id: group.join(""),
|
id: group.join(""),
|
||||||
name: group.join(", ").slice(0, 10),
|
name: group.join(", ").slice(0, 10),
|
||||||
});
|
});
|
||||||
setCreateChat(false);
|
setCreateChat(false);
|
||||||
|
if (onCommunityClick) {
|
||||||
|
onCommunityClick();
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
@ -96,11 +103,14 @@ export function Channels({
|
|||||||
isActive={member === activeChannelId}
|
isActive={member === activeChannelId}
|
||||||
isMuted={false}
|
isMuted={false}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
onCommunityClick({
|
setActiveChannel({
|
||||||
id: member,
|
id: member,
|
||||||
name: member.slice(0, 10),
|
name: member.slice(0, 10),
|
||||||
description: "Contact",
|
description: "Contact",
|
||||||
});
|
});
|
||||||
|
if (onCommunityClick) {
|
||||||
|
onCommunityClick();
|
||||||
|
}
|
||||||
setCreateChat(false);
|
setCreateChat(false);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
import React, { useEffect, useMemo, useState } from "react";
|
import React, { useMemo, useState } from "react";
|
||||||
import { Identity } from "status-communities/dist/cjs";
|
import { Identity } from "status-communities/dist/cjs";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
import { useMessengerContext } from "../contexts/messengerProvider";
|
import { useMessengerContext } from "../contexts/messengerProvider";
|
||||||
import { useNarrow } from "../contexts/narrowProvider";
|
import { useNarrow } from "../contexts/narrowProvider";
|
||||||
import { ChannelData } from "../models/ChannelData";
|
|
||||||
import { uintToImgUrl } from "../utils/uintToImgUrl";
|
import { uintToImgUrl } from "../utils/uintToImgUrl";
|
||||||
|
|
||||||
import { Channels } from "./Channels/Channels";
|
import { Channels } from "./Channels/Channels";
|
||||||
@ -19,16 +18,9 @@ import { CommunitySkeleton } from "./Skeleton/CommunitySkeleton";
|
|||||||
interface ChatProps {
|
interface ChatProps {
|
||||||
communityKey: string;
|
communityKey: string;
|
||||||
identity: Identity;
|
identity: Identity;
|
||||||
setActiveChannel: (channel: ChannelData) => void;
|
|
||||||
activeChannel: ChannelData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function Chat({
|
export function Chat({ communityKey, identity }: ChatProps) {
|
||||||
communityKey,
|
|
||||||
identity,
|
|
||||||
setActiveChannel,
|
|
||||||
activeChannel,
|
|
||||||
}: ChatProps) {
|
|
||||||
const [showMembers, setShowMembers] = useState(true);
|
const [showMembers, setShowMembers] = useState(true);
|
||||||
const [showChannels, setShowChannels] = useState(true);
|
const [showChannels, setShowChannels] = useState(true);
|
||||||
const [membersList, setMembersList] = useState([]);
|
const [membersList, setMembersList] = useState([]);
|
||||||
@ -63,24 +55,6 @@ export function Chat({
|
|||||||
}
|
}
|
||||||
}, [community]);
|
}, [community]);
|
||||||
|
|
||||||
const channels = useMemo(() => {
|
|
||||||
if (community?.chats) {
|
|
||||||
return Array.from(community.chats.values()).map((chat) => {
|
|
||||||
return {
|
|
||||||
id: chat.id,
|
|
||||||
name: chat.communityChat?.identity?.displayName ?? "",
|
|
||||||
description: chat.communityChat?.identity?.description ?? "",
|
|
||||||
};
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}, [community]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (channels.length > 0) setActiveChannel(channels[0]);
|
|
||||||
}, [channels]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ChatWrapper>
|
<ChatWrapper>
|
||||||
{showChannels && !narrow && (
|
{showChannels && !narrow && (
|
||||||
@ -91,9 +65,6 @@ export function Chat({
|
|||||||
<CommunitySkeleton />
|
<CommunitySkeleton />
|
||||||
)}
|
)}
|
||||||
<Channels
|
<Channels
|
||||||
onCommunityClick={(e) => setActiveChannel(e)}
|
|
||||||
activeChannelId={activeChannel?.id ?? ""}
|
|
||||||
channels={channels}
|
|
||||||
membersList={membersList}
|
membersList={membersList}
|
||||||
groupList={groupList}
|
groupList={groupList}
|
||||||
setCreateChat={setCreateChat}
|
setCreateChat={setCreateChat}
|
||||||
@ -104,16 +75,12 @@ export function Chat({
|
|||||||
{!createChat && (
|
{!createChat && (
|
||||||
<ChatBody
|
<ChatBody
|
||||||
identity={identity}
|
identity={identity}
|
||||||
channel={activeChannel}
|
|
||||||
setActiveChannel={setActiveChannel}
|
|
||||||
activeChannelId={activeChannel.id}
|
|
||||||
onClick={() => setShowMembers(!showMembers)}
|
onClick={() => setShowMembers(!showMembers)}
|
||||||
showMembers={showMembers}
|
showMembers={showMembers}
|
||||||
community={communityData}
|
community={communityData}
|
||||||
showCommunity={!showChannels}
|
showCommunity={!showChannels}
|
||||||
onCommunityClick={showModal}
|
onCommunityClick={showModal}
|
||||||
onEditClick={showEditModal}
|
onEditClick={showEditModal}
|
||||||
channels={channels}
|
|
||||||
membersList={membersList}
|
membersList={membersList}
|
||||||
groupList={groupList}
|
groupList={groupList}
|
||||||
setMembersList={setMembersList}
|
setMembersList={setMembersList}
|
||||||
@ -134,7 +101,6 @@ export function Chat({
|
|||||||
community={communityData}
|
community={communityData}
|
||||||
setMembersList={setMembersList}
|
setMembersList={setMembersList}
|
||||||
setGroupList={setGroupList}
|
setGroupList={setGroupList}
|
||||||
setActiveChannel={setActiveChannel}
|
|
||||||
setCreateChat={setCreateChat}
|
setCreateChat={setCreateChat}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@ -152,7 +118,6 @@ export function Chat({
|
|||||||
<EditModal
|
<EditModal
|
||||||
isVisible={isEditVisible}
|
isVisible={isEditVisible}
|
||||||
onClose={() => setIsEditVisible(false)}
|
onClose={() => setIsEditVisible(false)}
|
||||||
channel={activeChannel}
|
|
||||||
/>
|
/>
|
||||||
</ChatWrapper>
|
</ChatWrapper>
|
||||||
);
|
);
|
||||||
|
@ -4,7 +4,6 @@ import styled from "styled-components";
|
|||||||
|
|
||||||
import { useMessengerContext } from "../../contexts/messengerProvider";
|
import { useMessengerContext } from "../../contexts/messengerProvider";
|
||||||
import { useNarrow } from "../../contexts/narrowProvider";
|
import { useNarrow } from "../../contexts/narrowProvider";
|
||||||
import { ChannelData } from "../../models/ChannelData";
|
|
||||||
import { CommunityData } from "../../models/CommunityData";
|
import { CommunityData } from "../../models/CommunityData";
|
||||||
import { Channel } from "../Channels/Channel";
|
import { Channel } from "../Channels/Channel";
|
||||||
import { EmptyChannel } from "../Channels/EmptyChannel";
|
import { EmptyChannel } from "../Channels/EmptyChannel";
|
||||||
@ -24,16 +23,12 @@ import { ChatMessages } from "./ChatMessages";
|
|||||||
|
|
||||||
interface ChatBodyProps {
|
interface ChatBodyProps {
|
||||||
identity: Identity;
|
identity: Identity;
|
||||||
channel: ChannelData;
|
|
||||||
community: CommunityData | undefined;
|
community: CommunityData | undefined;
|
||||||
onClick: () => void;
|
onClick: () => void;
|
||||||
showMembers: boolean;
|
showMembers: boolean;
|
||||||
showCommunity: boolean;
|
showCommunity: boolean;
|
||||||
setActiveChannel: (val: ChannelData) => void;
|
|
||||||
activeChannelId: string;
|
|
||||||
onCommunityClick: () => void;
|
onCommunityClick: () => void;
|
||||||
onEditClick: () => void;
|
onEditClick: () => void;
|
||||||
channels: ChannelData[];
|
|
||||||
membersList: string[];
|
membersList: string[];
|
||||||
groupList: [][];
|
groupList: [][];
|
||||||
setMembersList: any;
|
setMembersList: any;
|
||||||
@ -43,23 +38,19 @@ interface ChatBodyProps {
|
|||||||
|
|
||||||
export function ChatBody({
|
export function ChatBody({
|
||||||
identity,
|
identity,
|
||||||
channel,
|
|
||||||
community,
|
community,
|
||||||
onClick,
|
onClick,
|
||||||
showMembers,
|
showMembers,
|
||||||
showCommunity,
|
showCommunity,
|
||||||
setActiveChannel,
|
|
||||||
activeChannelId,
|
|
||||||
onCommunityClick,
|
onCommunityClick,
|
||||||
onEditClick,
|
onEditClick,
|
||||||
channels,
|
|
||||||
membersList,
|
membersList,
|
||||||
groupList,
|
groupList,
|
||||||
setMembersList,
|
setMembersList,
|
||||||
setGroupList,
|
setGroupList,
|
||||||
setCreateChat,
|
setCreateChat,
|
||||||
}: ChatBodyProps) {
|
}: ChatBodyProps) {
|
||||||
const { messenger, messages } = useMessengerContext();
|
const { messenger, messages, activeChannel } = useMessengerContext();
|
||||||
const narrow = useNarrow();
|
const narrow = useNarrow();
|
||||||
const [showChannelsList, setShowChannelsList] = useState(false);
|
const [showChannelsList, setShowChannelsList] = useState(false);
|
||||||
const [showMembersList, setShowMembersList] = useState(false);
|
const [showMembersList, setShowMembersList] = useState(false);
|
||||||
@ -92,7 +83,6 @@ export function ChatBody({
|
|||||||
community={community}
|
community={community}
|
||||||
setMembersList={setMembersList}
|
setMembersList={setMembersList}
|
||||||
setGroupList={setGroupList}
|
setGroupList={setGroupList}
|
||||||
setActiveChannel={setActiveChannel}
|
|
||||||
setCreateChat={setCreateChat}
|
setCreateChat={setCreateChat}
|
||||||
editGroup={editGroup}
|
editGroup={editGroup}
|
||||||
/>
|
/>
|
||||||
@ -115,7 +105,7 @@ export function ChatBody({
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
<Channel
|
<Channel
|
||||||
channel={channel}
|
channel={activeChannel}
|
||||||
isActive={narrow ? showChannelsList : true}
|
isActive={narrow ? showChannelsList : true}
|
||||||
activeView={true}
|
activeView={true}
|
||||||
isMuted={false}
|
isMuted={false}
|
||||||
@ -143,7 +133,7 @@ export function ChatBody({
|
|||||||
{!community && <Loading />}
|
{!community && <Loading />}
|
||||||
{showChannelMenu && (
|
{showChannelMenu && (
|
||||||
<ChannelMenu
|
<ChannelMenu
|
||||||
channel={channel}
|
channel={activeChannel}
|
||||||
messages={messages}
|
messages={messages}
|
||||||
switchMemberList={switchMemberList}
|
switchMemberList={switchMemberList}
|
||||||
setShowChannelMenu={setShowChannelMenu}
|
setShowChannelMenu={setShowChannelMenu}
|
||||||
@ -161,13 +151,13 @@ export function ChatBody({
|
|||||||
messenger && community ? (
|
messenger && community ? (
|
||||||
<ChatMessages
|
<ChatMessages
|
||||||
messages={messages}
|
messages={messages}
|
||||||
activeChannelId={activeChannelId}
|
activeChannelId={activeChannel.id}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<LoadingSkeleton />
|
<LoadingSkeleton />
|
||||||
)
|
)
|
||||||
) : (
|
) : (
|
||||||
<EmptyChannel channel={channel} />
|
<EmptyChannel channel={activeChannel} />
|
||||||
)}
|
)}
|
||||||
<ChatInput />
|
<ChatInput />
|
||||||
</>
|
</>
|
||||||
@ -175,11 +165,8 @@ export function ChatBody({
|
|||||||
|
|
||||||
{showChannelsList && narrow && (
|
{showChannelsList && narrow && (
|
||||||
<NarrowChannels
|
<NarrowChannels
|
||||||
channels={channels}
|
|
||||||
community={community.name}
|
community={community.name}
|
||||||
setActiveChannel={setActiveChannel}
|
|
||||||
setShowChannels={setShowChannelsList}
|
setShowChannels={setShowChannelsList}
|
||||||
activeChannelId={activeChannelId}
|
|
||||||
membersList={membersList}
|
membersList={membersList}
|
||||||
groupList={groupList}
|
groupList={groupList}
|
||||||
setCreateChat={setCreateChat}
|
setCreateChat={setCreateChat}
|
||||||
|
@ -4,7 +4,6 @@ import { bufToHex } from "status-communities/dist/cjs/utils";
|
|||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
import { useMessengerContext } from "../../contexts/messengerProvider";
|
import { useMessengerContext } from "../../contexts/messengerProvider";
|
||||||
import { ChannelData } from "../../models/ChannelData";
|
|
||||||
import { CommunityData } from "../../models/CommunityData";
|
import { CommunityData } from "../../models/CommunityData";
|
||||||
import { buttonStyles } from "../Buttons/buttonStyle";
|
import { buttonStyles } from "../Buttons/buttonStyle";
|
||||||
import { CrossIcon } from "../Icons/CrossIcon";
|
import { CrossIcon } from "../Icons/CrossIcon";
|
||||||
@ -16,7 +15,6 @@ interface ChatCreationProps {
|
|||||||
community: CommunityData;
|
community: CommunityData;
|
||||||
setMembersList: any;
|
setMembersList: any;
|
||||||
setGroupList: any;
|
setGroupList: any;
|
||||||
setActiveChannel: (val: ChannelData) => void;
|
|
||||||
setCreateChat: (val: boolean) => void;
|
setCreateChat: (val: boolean) => void;
|
||||||
editGroup?: boolean;
|
editGroup?: boolean;
|
||||||
}
|
}
|
||||||
@ -26,14 +24,13 @@ export function ChatCreation({
|
|||||||
community,
|
community,
|
||||||
setMembersList,
|
setMembersList,
|
||||||
setGroupList,
|
setGroupList,
|
||||||
setActiveChannel,
|
|
||||||
setCreateChat,
|
setCreateChat,
|
||||||
editGroup,
|
editGroup,
|
||||||
}: ChatCreationProps) {
|
}: ChatCreationProps) {
|
||||||
const [query, setQuery] = useState("");
|
const [query, setQuery] = useState("");
|
||||||
const [styledGroup, setStyledGroup] = useState<string[]>([]);
|
const [styledGroup, setStyledGroup] = useState<string[]>([]);
|
||||||
|
|
||||||
const { contacts } = useMessengerContext();
|
const { contacts, setActiveChannel } = useMessengerContext();
|
||||||
|
|
||||||
const addMember = (member: string) => {
|
const addMember = (member: string) => {
|
||||||
setStyledGroup((prevMembers: string[]) => {
|
setStyledGroup((prevMembers: string[]) => {
|
||||||
|
@ -2,7 +2,6 @@ import React, { useState } from "react";
|
|||||||
import { Identity } from "status-communities/dist/cjs";
|
import { Identity } from "status-communities/dist/cjs";
|
||||||
|
|
||||||
import { MessengerProvider } from "../contexts/messengerProvider";
|
import { MessengerProvider } from "../contexts/messengerProvider";
|
||||||
import { ChannelData } from "../models/ChannelData";
|
|
||||||
|
|
||||||
import { Chat } from "./Chat";
|
import { Chat } from "./Chat";
|
||||||
import { IdentityLoader } from "./Form/IdentityLoader";
|
import { IdentityLoader } from "./Form/IdentityLoader";
|
||||||
@ -13,25 +12,11 @@ interface ChatLoaderProps {
|
|||||||
|
|
||||||
export function ChatLoader({ communityKey }: ChatLoaderProps) {
|
export function ChatLoader({ communityKey }: ChatLoaderProps) {
|
||||||
const [identity, setIdentity] = useState<Identity | undefined>(undefined);
|
const [identity, setIdentity] = useState<Identity | undefined>(undefined);
|
||||||
const [activeChannel, setActiveChannel] = useState<ChannelData>({
|
|
||||||
id: "",
|
|
||||||
name: "",
|
|
||||||
description: "",
|
|
||||||
});
|
|
||||||
|
|
||||||
if (identity) {
|
if (identity) {
|
||||||
return (
|
return (
|
||||||
<MessengerProvider
|
<MessengerProvider identity={identity} communityKey={communityKey}>
|
||||||
identity={identity}
|
<Chat communityKey={communityKey} identity={identity} />
|
||||||
communityKey={communityKey}
|
|
||||||
activeChannel={activeChannel.id}
|
|
||||||
>
|
|
||||||
<Chat
|
|
||||||
communityKey={communityKey}
|
|
||||||
activeChannel={activeChannel}
|
|
||||||
setActiveChannel={setActiveChannel}
|
|
||||||
identity={identity}
|
|
||||||
/>
|
|
||||||
</MessengerProvider>
|
</MessengerProvider>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
import { ChannelData } from "../../models/ChannelData";
|
import { useMessengerContext } from "../../contexts/messengerProvider";
|
||||||
import { buttonStyles } from "../Buttons/buttonStyle";
|
import { buttonStyles } from "../Buttons/buttonStyle";
|
||||||
import { ChannelLogo } from "../Channels/Channel";
|
import { ChannelLogo } from "../Channels/Channel";
|
||||||
import { AddIcon } from "../Icons/AddIcon";
|
import { AddIcon } from "../Icons/AddIcon";
|
||||||
@ -10,11 +10,8 @@ import { textMediumStyles } from "../Text";
|
|||||||
import { BasicModalProps, Modal } from "./Modal";
|
import { BasicModalProps, Modal } from "./Modal";
|
||||||
import { Heading, Section } from "./ModalStyle";
|
import { Heading, Section } from "./ModalStyle";
|
||||||
|
|
||||||
interface EditModalProps extends BasicModalProps {
|
export const EditModal = ({ isVisible, onClose }: BasicModalProps) => {
|
||||||
channel: ChannelData;
|
const { activeChannel } = useMessengerContext();
|
||||||
}
|
|
||||||
|
|
||||||
export const EditModal = ({ isVisible, onClose, channel }: EditModalProps) => {
|
|
||||||
const [groupName, setGroupName] = useState("");
|
const [groupName, setGroupName] = useState("");
|
||||||
const [image, setImage] = useState("");
|
const [image, setImage] = useState("");
|
||||||
|
|
||||||
@ -25,8 +22,8 @@ export const EditModal = ({ isVisible, onClose, channel }: EditModalProps) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleUpload = () => {
|
const handleUpload = () => {
|
||||||
channel.icon = image;
|
activeChannel.icon = image;
|
||||||
channel.name = groupName;
|
activeChannel.name = groupName;
|
||||||
onClose();
|
onClose();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -57,12 +54,14 @@ export const EditModal = ({ isVisible, onClose, channel }: EditModalProps) => {
|
|||||||
style={{
|
style={{
|
||||||
backgroundImage: image
|
backgroundImage: image
|
||||||
? `url(${image}`
|
? `url(${image}`
|
||||||
: channel.icon
|
: activeChannel.icon
|
||||||
? `url(${channel.icon}`
|
? `url(${activeChannel.icon}`
|
||||||
: "",
|
: "",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{!channel.icon && !image && channel.name.slice(0, 1).toUpperCase()}
|
{!activeChannel.icon &&
|
||||||
|
!image &&
|
||||||
|
activeChannel.name.slice(0, 1).toUpperCase()}
|
||||||
<AddPictureInputWrapper>
|
<AddPictureInputWrapper>
|
||||||
<AddIcon />
|
<AddIcon />
|
||||||
<AddPictureInput
|
<AddPictureInput
|
||||||
|
@ -1,17 +1,13 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
|
|
||||||
import { ChannelData } from "../../models/ChannelData";
|
|
||||||
import { Channels } from "../Channels/Channels";
|
import { Channels } from "../Channels/Channels";
|
||||||
|
|
||||||
import { NarrowTopbar } from "./NarrowTopbar";
|
import { NarrowTopbar } from "./NarrowTopbar";
|
||||||
|
|
||||||
interface NarrowChannelsProps {
|
interface NarrowChannelsProps {
|
||||||
community: string;
|
community: string;
|
||||||
setActiveChannel: (val: ChannelData) => void;
|
|
||||||
activeChannelId: string;
|
|
||||||
setShowChannels: (val: boolean) => void;
|
setShowChannels: (val: boolean) => void;
|
||||||
channels: ChannelData[];
|
|
||||||
membersList: string[];
|
membersList: string[];
|
||||||
groupList: string[][];
|
groupList: string[][];
|
||||||
setCreateChat: (val: boolean) => void;
|
setCreateChat: (val: boolean) => void;
|
||||||
@ -19,10 +15,7 @@ interface NarrowChannelsProps {
|
|||||||
|
|
||||||
export function NarrowChannels({
|
export function NarrowChannels({
|
||||||
community,
|
community,
|
||||||
setActiveChannel,
|
|
||||||
activeChannelId,
|
|
||||||
setShowChannels,
|
setShowChannels,
|
||||||
channels,
|
|
||||||
membersList,
|
membersList,
|
||||||
groupList,
|
groupList,
|
||||||
setCreateChat,
|
setCreateChat,
|
||||||
@ -31,12 +24,7 @@ export function NarrowChannels({
|
|||||||
<ListWrapper>
|
<ListWrapper>
|
||||||
<NarrowTopbar list="Channels" community={community} />
|
<NarrowTopbar list="Channels" community={community} />
|
||||||
<Channels
|
<Channels
|
||||||
onCommunityClick={(e) => {
|
onCommunityClick={() => setShowChannels(false)}
|
||||||
setActiveChannel(e);
|
|
||||||
setShowChannels(false);
|
|
||||||
}}
|
|
||||||
activeChannelId={activeChannelId}
|
|
||||||
channels={channels}
|
|
||||||
membersList={membersList}
|
membersList={membersList}
|
||||||
groupList={groupList}
|
groupList={groupList}
|
||||||
setCreateChat={setCreateChat}
|
setCreateChat={setCreateChat}
|
||||||
|
@ -13,6 +13,12 @@ const MessengerContext = createContext<MessengerType>({
|
|||||||
loadingMessages: false,
|
loadingMessages: false,
|
||||||
community: undefined,
|
community: undefined,
|
||||||
contacts: [],
|
contacts: [],
|
||||||
|
activeChannel: {
|
||||||
|
id: "",
|
||||||
|
name: "",
|
||||||
|
},
|
||||||
|
channels: [],
|
||||||
|
setActiveChannel: () => undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
export function useMessengerContext() {
|
export function useMessengerContext() {
|
||||||
@ -21,17 +27,15 @@ export function useMessengerContext() {
|
|||||||
|
|
||||||
interface MessengerProviderProps {
|
interface MessengerProviderProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
activeChannel: string;
|
|
||||||
communityKey?: string;
|
communityKey?: string;
|
||||||
identity?: Identity;
|
identity?: Identity;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function MessengerProvider({
|
export function MessengerProvider({
|
||||||
children,
|
children,
|
||||||
activeChannel,
|
|
||||||
communityKey,
|
communityKey,
|
||||||
identity,
|
identity,
|
||||||
}: MessengerProviderProps) {
|
}: MessengerProviderProps) {
|
||||||
const messenger = useMessenger(activeChannel, communityKey, identity);
|
const messenger = useMessenger(communityKey, identity);
|
||||||
return <MessengerContext.Provider value={messenger} children={children} />;
|
return <MessengerContext.Provider value={messenger} children={children} />;
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import {
|
|||||||
Messenger,
|
Messenger,
|
||||||
} from "status-communities/dist/cjs";
|
} from "status-communities/dist/cjs";
|
||||||
|
|
||||||
|
import { ChannelData } from "../../models/ChannelData";
|
||||||
import { ChatMessage } from "../../models/ChatMessage";
|
import { ChatMessage } from "../../models/ChatMessage";
|
||||||
import { Contact } from "../../models/Contact";
|
import { Contact } from "../../models/Contact";
|
||||||
import { createCommunity } from "../../utils/createCommunity";
|
import { createCommunity } from "../../utils/createCommunity";
|
||||||
@ -28,13 +29,23 @@ export type MessengerType = {
|
|||||||
loadingMessages: boolean;
|
loadingMessages: boolean;
|
||||||
community: Community | undefined;
|
community: Community | undefined;
|
||||||
contacts: Contact[];
|
contacts: Contact[];
|
||||||
|
channels: ChannelData[];
|
||||||
|
activeChannel: ChannelData;
|
||||||
|
setActiveChannel: (channel: ChannelData) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function useMessenger(
|
export function useMessenger(
|
||||||
chatId: string,
|
|
||||||
communityKey: string | undefined,
|
communityKey: string | undefined,
|
||||||
identity: Identity | undefined
|
identity: Identity | undefined
|
||||||
) {
|
) {
|
||||||
|
const [activeChannel, setActiveChannel] = useState<ChannelData>({
|
||||||
|
id: "",
|
||||||
|
name: "",
|
||||||
|
description: "",
|
||||||
|
});
|
||||||
|
|
||||||
|
const chatId = useMemo(() => activeChannel.id, [activeChannel]);
|
||||||
|
|
||||||
const [messenger, setMessenger] = useState<Messenger | undefined>(undefined);
|
const [messenger, setMessenger] = useState<Messenger | undefined>(undefined);
|
||||||
|
|
||||||
const [internalContacts, setInternalContacts] = useState<{
|
const [internalContacts, setInternalContacts] = useState<{
|
||||||
@ -114,6 +125,25 @@ export function useMessenger(
|
|||||||
[chatId, messenger]
|
[chatId, messenger]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const channels = useMemo<ChannelData[]>(() => {
|
||||||
|
if (community?.chats) {
|
||||||
|
return Array.from(community.chats.values()).map((chat) => {
|
||||||
|
return {
|
||||||
|
id: chat.id,
|
||||||
|
name: chat.communityChat?.identity?.displayName ?? "",
|
||||||
|
description: chat.communityChat?.identity?.description ?? "",
|
||||||
|
type: "channel",
|
||||||
|
};
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}, [community]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (channels.length > 0) setActiveChannel(channels[0]);
|
||||||
|
}, [channels]);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
messenger,
|
messenger,
|
||||||
messages,
|
messages,
|
||||||
@ -124,5 +154,8 @@ export function useMessenger(
|
|||||||
loadingMessages,
|
loadingMessages,
|
||||||
community,
|
community,
|
||||||
contacts,
|
contacts,
|
||||||
|
channels,
|
||||||
|
activeChannel,
|
||||||
|
setActiveChannel,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user