diff --git a/bfrontend/src/API/Gateway/globalGatewayConnection.js b/bfrontend/src/API/Gateway/globalGatewayConnection.js
index 2d42739..15f8655 100644
--- a/bfrontend/src/API/Gateway/globalGatewayConnection.js
+++ b/bfrontend/src/API/Gateway/globalGatewayConnection.js
@@ -18,6 +18,7 @@ const wsCloseCodes = {
NOT_AUTHORIZED: [4006, "Not authorized"],
FLOODING: [4007, "Flooding"],
NO_PING: [4008, "No ping"],
+ UNSUPPORTED_ATTRIBUTE: [4009, "Unsupported attribute."],
};
const cancelReconnectionForCodes = [
wsCloseCodes.NOT_AUTHENTICATED[0],
@@ -25,6 +26,7 @@ const cancelReconnectionForCodes = [
wsCloseCodes.SERVER_DENIED_CONNECTION[0],
wsCloseCodes.TOO_MANY_SESSIONS[0],
wsCloseCodes.FLOODING[0],
+ wsCloseCodes.UNSUPPORTED_ATTRIBUTE[0],
];
globalGatewayConnection.onopen = (sessionData) => {
diff --git a/bfrontend/src/Components/Channels/ChannelMessageView.js b/bfrontend/src/Components/Channels/ChannelMessageView.js
index 2d3383a..d1faaf4 100644
--- a/bfrontend/src/Components/Channels/ChannelMessageView.js
+++ b/bfrontend/src/Components/Channels/ChannelMessageView.js
@@ -1,23 +1,52 @@
import Message from "../Messages/Message";
-import { useRef, useEffect } from 'react';
-import { CommentDiscussionIcon } from "@primer/octicons-react";
+import { useRef, useEffect, useState } from 'react';
+import APIRequest from "../../API/APIRequest";
+import { useDispatch } from "react-redux";
-export default function ChannelMessageView({messages}) {
+export default function ChannelMessageView({messages, channelId}) {
const invisibleBottomMessageRef = useRef();
+ console.log(messages);
+
+ const [isLoading, setIsLoading] = useState(false);
+ const dispatch = useDispatch();
+ const scroller = useRef();
+
+ const loadOlderMessages = () => {
+ if (isLoading) return;
+ if (!channelId) return;
+ setIsLoading(true);
+
+ const request = messages[0] ? `/api/v1/content/channel/${channelId}/messages?before=${messages[0]._id}` : `/api/v1/content/channel/${channelId}/messages`;
+
+ APIRequest.authenticated(request)
+ .then((res) => {
+ if (res.json.channelMessages)
+ dispatch({
+ type: "messagestore/addmessagesback",
+ messages: res.json.channelMessages.reverse(),
+ channelId
+ })
+ })
+ .then(() => {
+ setIsLoading(false);
+ });
+ };
+
+ const onScroll = () => {
+ if (scroller.current.scrollTop === 0) {
+ loadOlderMessages();
+ }
+ };
+
+ useEffect(loadOlderMessages, [channelId, dispatch]);
+
useEffect(() => {
invisibleBottomMessageRef.current.scrollIntoView(true);
}, [messages]);
- let messagesView = messages.map((message) => (