diff --git a/net/web/package.json b/net/web/package.json
index 45b580ab..584bd518 100644
--- a/net/web/package.json
+++ b/net/web/package.json
@@ -13,6 +13,7 @@
"react-easy-crop": "^4.1.4",
"react-router-dom": "^6.2.2",
"react-scripts": "5.0.0",
+ "react-virtualized": "^9.22.3",
"styled-components": "^5.3.3",
"web-vitals": "^2.1.0"
},
diff --git a/net/web/src/User/Conversation/Conversation.jsx b/net/web/src/User/Conversation/Conversation.jsx
index 2e8afc69..e90f8988 100644
--- a/net/web/src/User/Conversation/Conversation.jsx
+++ b/net/web/src/User/Conversation/Conversation.jsx
@@ -2,19 +2,67 @@ import React, { useState, useEffect, useRef } from 'react'
import { CloseOutlined, UserOutlined } from '@ant-design/icons';
import { useConversation } from './useConversation.hook';
import { Button, Checkbox, Modal } from 'antd'
-import { ConversationWrapper, CloseButton } from './Conversation.styled';
+import { ConversationWrapper, CloseButton, ListItem } from './Conversation.styled';
+import { AutoSizer, CellMeasurer, CellMeasurerCache, List } from 'react-virtualized';
export function Conversation() {
+ const [ scrollIndex, setScrollIndex ] = useState(null);
const { state, actions } = useConversation();
+ const cache = new CellMeasurerCache({
+ defaultHeight: 50,
+ fixedWidth: true
+ });
+
+ useEffect(() => {
+ })
+
+ const renderRow = ({ index, isScrolling, key, parent, style }) => {
+
+ return (
+
+ {({ measure, registerChild }) => (
+ // 'style' attribute required to position cell (within parent List)
+
+
+
+
+ )}
+
+ );
+ }
+
return (
-
+
+
+
+ {({height, width}) => (
+
+ )}
+
+
+
)
}
diff --git a/net/web/src/User/Conversation/Conversation.styled.jsx b/net/web/src/User/Conversation/Conversation.styled.jsx
index ca715e8c..c1edcd33 100644
--- a/net/web/src/User/Conversation/Conversation.styled.jsx
+++ b/net/web/src/User/Conversation/Conversation.styled.jsx
@@ -38,6 +38,14 @@ export const ConversationWrapper = styled.div`
font-size: 24px;
color: white;
}
+
+ .container {
+ display: flex;
+ flex-grow: 1;
+ flex-direction: row;
+ width: 100%;
+ overflow: auto;
+ }
`;
export const CloseButton = styled(Button)`
@@ -45,3 +53,9 @@ export const CloseButton = styled(Button)`
color: white;
`;
+export const ListItem = styled.div`
+ dispaly: flex;
+ flex-direction: row;
+ width: 64px;
+`;
+
diff --git a/net/web/yarn.lock b/net/web/yarn.lock
index 9483ef5c..9f7e02ac 100644
--- a/net/web/yarn.lock
+++ b/net/web/yarn.lock
@@ -1065,6 +1065,13 @@
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7":
+ version "7.17.9"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
+ integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/runtime@^7.7.6":
version "7.17.7"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.7.tgz#a5f3328dc41ff39d803f311cfe17703418cf9825"
@@ -3039,6 +3046,11 @@ cliui@^7.0.2:
strip-ansi "^6.0.0"
wrap-ansi "^7.0.0"
+clsx@^1.0.4:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
+ integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz"
@@ -3719,6 +3731,14 @@ dom-converter@^0.2.0:
dependencies:
utila "~0.4"
+dom-helpers@^5.1.3:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
+ integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
+ dependencies:
+ "@babel/runtime" "^7.8.7"
+ csstype "^3.0.2"
+
dom-serializer@0:
version "0.2.2"
resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz"
@@ -7139,7 +7159,7 @@ prompts@^2.0.1, prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.8.1:
+prop-types@^15.7.2, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -7658,6 +7678,11 @@ react-is@^17.0.1:
resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+
react-refresh@^0.11.0:
version "0.11.0"
resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz"
@@ -7733,6 +7758,18 @@ react-scripts@5.0.0:
optionalDependencies:
fsevents "^2.3.2"
+react-virtualized@^9.22.3:
+ version "9.22.3"
+ resolved "https://registry.yarnpkg.com/react-virtualized/-/react-virtualized-9.22.3.tgz#f430f16beb0a42db420dbd4d340403c0de334421"
+ integrity sha512-MKovKMxWTcwPSxE1kK1HcheQTWfuCxAuBoSTf2gwyMM21NdX/PXUhnoP8Uc5dRKd+nKm8v41R36OellhdCpkrw==
+ dependencies:
+ "@babel/runtime" "^7.7.2"
+ clsx "^1.0.4"
+ dom-helpers "^5.1.3"
+ loose-envify "^1.4.0"
+ prop-types "^15.7.2"
+ react-lifecycles-compat "^3.0.4"
+
react@^17.0.2:
version "17.0.2"
resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz"