Skip to content

Commit

Permalink
notification for accept group request
Browse files Browse the repository at this point in the history
  • Loading branch information
sujal-into authored and sachin-into committed Mar 15, 2024
1 parent 4dafdb7 commit 6173894
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 124 deletions.
9 changes: 6 additions & 3 deletions metro.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,12 @@ module.exports = (() => {
config.resolver.resolveRequest = (context, moduleName, platform) => {
if (
platform !== "web" &&
["redux-persist-electron-storage", "electron", "electron-store"].includes(
moduleName,
)
[
"redux-persist-electron-storage",
"electron",
"electron-store",
"react-native-vision-camera",
].includes(moduleName)
) {
return {
type: "empty",
Expand Down
88 changes: 14 additions & 74 deletions packages/screens/Mini/Notifications/MessengerNotificationCard.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React from "react";
import moment from "moment";
import React, { useMemo } from "react";
import { View } from "react-native";

import { randomGradients } from "./notificationData";
Expand Down Expand Up @@ -27,8 +28,8 @@ export default function MessengerNotificationCard({
}: {
item: TypeNotification;
}) {
const randomIndex = Math.floor(Math.random() * 4);
const navigation = useAppNavigation();
const randomIndex = useMemo(() => Math.floor(Math.random() * 4), []);

return (
<CustomPressable
Expand All @@ -38,23 +39,19 @@ export default function MessengerNotificationCard({
onPress={() => {
store.dispatch(readNotification({ id: item.id }));

// TODO: Change to appropriate routes
if (item.type === "message") {
navigation.navigate("Conversation", {
conversationId: item?.id,
});
}

if (item.type === "contact-request") {
navigation.navigate("MiniFriend");
}

if (item.type === "group-invite") {
navigation.navigate("Conversation", { conversationId: item?.id });
}

if (item.type === "group-join") {
navigation.navigate("MiniChats", {});
navigation.navigate("Conversation", { conversationId: item?.id });
}
}}
>
{/* <FlexRow style={{ backgroundColor: azureBlue20 }}> */}
<View style={{ position: "relative" }}>
{item.avatar ? (
<SVGorImageIcon
Expand Down Expand Up @@ -89,32 +86,29 @@ export default function MessengerNotificationCard({
</View>
<SpacerRow size={3} />

{item.type === "message" && (
{item.type === "contact-request" && (
<NotificationCardInnerContent
id={item.id}
title="You received a new message!"
title="You have received a new contact request!"
date={item.timestamp}
desc="message by"
isRead={item.isRead}
/>
)}

{item.type === "contact-request" && (
{item.type === "group-invite" && (
<NotificationCardInnerContent
id={item.id}
title="You have received a new contact request!"
title="You have received a group join request!"
date={item.timestamp}
desc="message by"
isRead={item.isRead}
/>
)}

{item.type === "group-join" && (
<NotificationCardInnerContent
id={item.id}
title="You have received a group join request!"
title="Group join request is accepted!"
date={item.timestamp}
desc="message by"
isRead={item.isRead}
/>
)}
Expand All @@ -127,19 +121,12 @@ interface NotiCardContentProps {
isRead: boolean;
title: string;
date?: string;
desc: string;
link?: string;
user?: { userAvatar?: string; username: string; id: string };
}

function NotificationCardInnerContent({
id,
title,
date,
desc,
link,
isRead,
user,
}: NotiCardContentProps) {
return (
<View
Expand All @@ -162,58 +149,11 @@ function NotificationCardInnerContent({
{title}
</BrandText>
</View>

{/* <SpacerColumn size={0.4} /> */}
{/* <View style={{ flexDirection: "row" }}>
<BrandText style={[fontSemibold14, { color: neutralA3 }]}>
{desc}
</BrandText>
{user && (
<>
{user?.userAvatar ? (
<>
<SpacerRow size={1} />
<SVGorImageIcon
icon={user.userAvatar}
iconSize={18}
style={{
borderRadius: 18 / 2,
}}
/>
<BrandText style={[fontSemibold14]}>
{user.username}
</BrandText>
</>
) : (
<>
<SpacerRow size={1} />
<GradientBox
colors={[secondaryColor, primaryColor]}
size={18}
radius={9}
/>
<SpacerRow size={0.7} />
<BrandText style={[fontSemibold14]}>
{user?.username}
</BrandText>
</>
)}
</>
)}
{link && (
<>
<SpacerRow size={0.7} />
<BrandText style={[fontSemibold14]}>{link}</BrandText>
</>
)}
</View> */}
</View>

<View style={{ alignItems: "flex-end" }}>
<BrandText style={[fontSemibold13, { color: neutralA3 }]}>
{date}
{moment(date).fromNow()}
</BrandText>
<SpacerColumn size={0.4} />
{!isRead ? (
Expand Down
18 changes: 17 additions & 1 deletion packages/store/slices/notification.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ import { z } from "zod";

import { RootState } from "../store";

const NotificationType = z.enum(["message", "group-join", "contact-request"]);
const NotificationType = z.enum([
"group-invite",
"contact-request",
"group-join",
]);

export const Notification = z.object({
id: z.string(),
Expand Down Expand Up @@ -57,6 +61,18 @@ const notificationSlice = createSlice({
});
}
},
removeNotification: (state, action: PayloadAction<{ id: string }>) => {
if (action.payload.id) {
const notification = notificationSelectors.selectById(
state,
action.payload.id,
);

if (!notification) return;

notificationEntityAdapter.removeOne(state, notification.id);
}
},
setNotificationList: (state, action: PayloadAction<TypeNotification[]>) => {
notificationEntityAdapter.setAll(state, action.payload);
},
Expand Down
21 changes: 13 additions & 8 deletions packages/weshnet/message/processEvent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,19 @@ export const processMessage = async (
data: message,
}),
);
}

store.dispatch(
setNotificationRequest({
id: groupPk,
type: "group-join",
isRead: false,
}),
);
if (!isSender) {
store.dispatch(
setNotificationRequest({
id: groupPk,
name: message?.payload?.metadata?.groupName,
type: "group-invite",
timestamp: message?.timestamp,
isRead: false,
}),
);
}
}

break;
}
Expand Down Expand Up @@ -136,6 +140,7 @@ export const processMessage = async (
...data,
}),
);

break;
}
default: {
Expand Down
64 changes: 26 additions & 38 deletions packages/weshnet/metadata/processEvent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
} from "../../api/weshnet/protocoltypes";
import {
selectContactRequestList,
selectConversationList,
setContactRequest,
setContactRequestList,
setConversationList,
Expand All @@ -17,10 +18,7 @@ import { weshClient } from "../client";
import { subscribeMessages } from "../message/subscriber";
import { bytesFromString, decodeJSON, stringFromBytes } from "../utils";

import {
setNotificationList,
setNotificationRequest,
} from "@/store/slices/notification";
import { setNotificationRequest } from "@/store/slices/notification";

const processedMetadataIds: string[] = [];

Expand Down Expand Up @@ -126,23 +124,6 @@ export const processMetadata = async (data: GroupMetadataEvent) => {
),
),
);

store.dispatch(
setNotificationList(
contactRequests
.filter(
(item) =>
item.contactId !==
stringFromBytes(parsedData.payload.contactPk),
)
.map((notification) => ({
id: notification.id,
type: "contact-request",
isRead: false,
})),
),
);

break;
}
case EventType.EventTypeAccountContactRequestIncomingAccepted: {
Expand Down Expand Up @@ -170,21 +151,7 @@ export const processMetadata = async (data: GroupMetadataEvent) => {
),
),
);
store.dispatch(
setNotificationList(
contactRequests
.filter(
(item) =>
item.contactId !==
stringFromBytes(parsedData.payload.contactPk),
)
.map((notification) => ({
id: notification.id,
type: "contact-request",
isRead: false,
})),
),
);

const group = await weshClient.client.GroupInfo({
contactPk: bytesFromString(contactRequest.contactId),
});
Expand Down Expand Up @@ -217,17 +184,38 @@ export const processMetadata = async (data: GroupMetadataEvent) => {
}
case EventType.EventTypeAccountGroupJoined: {
const parsedData: any = GroupMetadataEvent.toJSON(data);

const conversationList = selectConversationList(store.getState());
parsedData.payload = AccountGroupJoined.decode(data.metadata.payload);

const groupPk = stringFromBytes(parsedData.payload.group.publicKey);
console.log("group-join");
const selectedGroup = conversationList.filter(
(singleConv) => singleConv.id === groupPk,
)[0];

store.dispatch(
setConversationList({
id: stringFromBytes(parsedData.payload.group.publicKey),
type: "group",
members: [],
members: [parsedData.payload.contactPk],
name: "Group",
status: "active",
}),
);

if (
selectedGroup &&
!selectedGroup?.members.includes(parsedData.payload.contackPk)
) {
store.dispatch(
setNotificationRequest({
id: stringFromBytes(parsedData.payload.group.publicKey),
type: "group-join",
isRead: false,
}),
);
}

subscribeMessages(stringFromBytes(parsedData.payload.group.publicKey));

break;
Expand Down

0 comments on commit 6173894

Please sign in to comment.