improvement: remove ifinite scroll lib

This commit is contained in:
canove
2020-08-08 17:35:42 -03:00
parent e0993dc238
commit c3d262648d
5 changed files with 45 additions and 32 deletions

View File

@@ -73,6 +73,8 @@ exports.index = async (req, res, next) => {
order: [["createdAt", "DESC"]], order: [["createdAt", "DESC"]],
}); });
const count = await ticket.countMessages();
const serializedMessages = ticketMessages.map(message => { const serializedMessages = ticketMessages.map(message => {
return { return {
...message.dataValues, ...message.dataValues,
@@ -86,7 +88,8 @@ exports.index = async (req, res, next) => {
return res.json({ return res.json({
messages: serializedMessages.reverse(), messages: serializedMessages.reverse(),
ticket: ticket, ticket,
count,
}); });
}; };

View File

@@ -18,7 +18,6 @@
"qrcode.react": "^1.0.0", "qrcode.react": "^1.0.0",
"react": "^16.13.1", "react": "^16.13.1",
"react-dom": "^16.13.1", "react-dom": "^16.13.1",
"react-infinite-scroll-reverse": "^1.0.3",
"react-linkify": "^1.0.0-alpha", "react-linkify": "^1.0.0-alpha",
"react-modal-image": "^2.5.0", "react-modal-image": "^2.5.0",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",

View File

@@ -4,7 +4,6 @@ import { useParams, useHistory } from "react-router-dom";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { isSameDay, parseISO, format } from "date-fns"; import { isSameDay, parseISO, format } from "date-fns";
import openSocket from "socket.io-client"; import openSocket from "socket.io-client";
import InfiniteScrollReverse from "react-infinite-scroll-reverse";
import ModalImage from "react-modal-image"; import ModalImage from "react-modal-image";
import { makeStyles } from "@material-ui/core/styles"; import { makeStyles } from "@material-ui/core/styles";
@@ -99,6 +98,7 @@ const useStyles = makeStyles(theme => ({
flexDirection: "column", flexDirection: "column",
flexGrow: 1, flexGrow: 1,
padding: "20px 20px 20px 20px", padding: "20px 20px 20px 20px",
// scrollBehavior: "smooth",
overflowY: "scroll", overflowY: "scroll",
"&::-webkit-scrollbar": { "&::-webkit-scrollbar": {
width: "8px", width: "8px",
@@ -233,8 +233,8 @@ const MessagesList = () => {
const [contact, setContact] = useState({}); const [contact, setContact] = useState({});
const [ticket, setTicket] = useState({}); const [ticket, setTicket] = useState({});
const [messagesList, setMessagesList] = useState([]); const [messagesList, setMessagesList] = useState([]);
const [hasMore, setHasMore] = useState(false); const [count, setCount] = useState(0);
const [pageNumber, setPageNumber] = useState(0); const [pageNumber, setPageNumber] = useState(1);
const [drawerOpen, setDrawerOpen] = useState(false); const [drawerOpen, setDrawerOpen] = useState(false);
const lastMessageRef = useRef(); const lastMessageRef = useRef();
@@ -246,17 +246,18 @@ const MessagesList = () => {
const delayDebounceFn = setTimeout(() => { const delayDebounceFn = setTimeout(() => {
const fetchMessages = async () => { const fetchMessages = async () => {
try { try {
const res = await api.get("/messages/" + ticketId, { const { data } = await api.get("/messages/" + ticketId, {
params: { pageNumber }, params: { pageNumber },
}); });
setContact(res.data.ticket.contact); setContact(data.ticket.contact);
setTicket(res.data.ticket); setTicket(data.ticket);
setMessagesList(prevMessages => { setMessagesList(prevMessages => {
return [...res.data.messages, ...prevMessages]; return [...data.messages, ...prevMessages];
}); });
setHasMore(res.data.messages.length > 0); setCount(data.count);
// setHasMore(res.data.messages.length > 0);
setLoading(false); setLoading(false);
if (pageNumber === 1 && res.data.messages.length > 1) { if (pageNumber === 1 && data.messages.length > 1) {
scrollToBottom(); scrollToBottom();
} }
} catch (err) { } catch (err) {
@@ -414,6 +415,23 @@ const MessagesList = () => {
} }
}; };
const handleScroll = e => {
if (count === messagesList.length) return;
const { scrollTop } = e.currentTarget;
if (scrollTop === 0) {
document.getElementById("messagesList").scrollTop = 50;
}
if (loading) {
return;
}
if (scrollTop < 50) {
loadMore();
}
};
const renderDailyTimestamps = (message, index) => { const renderDailyTimestamps = (message, index) => {
if (index === 0) { if (index === 0) {
return ( return (
@@ -593,15 +611,13 @@ const MessagesList = () => {
)} )}
</Card> </Card>
<div className={classes.messagesListWrapper}> <div className={classes.messagesListWrapper}>
<InfiniteScrollReverse <div
id="messagesList"
className={classes.messagesList} className={classes.messagesList}
hasMore={hasMore} onScroll={handleScroll}
isLoading={loading}
loadMore={loadMore}
loadArea={10}
> >
{messagesList.length > 0 ? renderMessages() : []} {messagesList.length > 0 ? renderMessages() : []}
</InfiniteScrollReverse> </div>
<MessageInput /> <MessageInput />
{loading ? ( {loading ? (
<div> <div>

View File

@@ -162,7 +162,7 @@ const Tickets = () => {
const userId = +localStorage.getItem("userId"); const userId = +localStorage.getItem("userId");
const { ticketId } = useParams(); const { ticketId } = useParams();
const [tickets, setTickets] = useState([]); const [tickets, setTickets] = useState([]);
const [loading, setLoading] = useState(); const [loading, setLoading] = useState(false);
const [searchParam, setSearchParam] = useState(""); const [searchParam, setSearchParam] = useState("");
const [tab, setTab] = useState("open"); const [tab, setTab] = useState("open");
const [newTicketModalOpen, setNewTicketModalOpen] = useState(false); const [newTicketModalOpen, setNewTicketModalOpen] = useState(false);
@@ -338,7 +338,7 @@ const Tickets = () => {
} }
}; };
const handleChangeTab = (event, newValue) => { const handleChangeTab = (e, newValue) => {
setTab(newValue); setTab(newValue);
}; };
@@ -482,11 +482,12 @@ const Tickets = () => {
showAllTickets={showAllTickets} showAllTickets={showAllTickets}
ticketId={ticketId} ticketId={ticketId}
handleAcepptTicket={handleAcepptTicket} handleAcepptTicket={handleAcepptTicket}
noTicketsTitle="Tudo resolvido" noTicketsTitle="Tudo resolvido!"
noTicketsMessage="Nenhum Ticket pendente" noTicketsMessage="Nenhum ticket pendente."
status="pending" status="pending"
userId={null} userId={null}
/> />
{loading && <TicketsSkeleton />}
</List> </List>
</Paper> </Paper>
</TabPanel> </TabPanel>
@@ -508,6 +509,7 @@ const Tickets = () => {
status="closed" status="closed"
userId={null} userId={null}
/> />
{loading && <TicketsSkeleton />}
</List> </List>
</Paper> </Paper>
</TabPanel> </TabPanel>
@@ -526,12 +528,12 @@ const Tickets = () => {
showAllTickets={showAllTickets} showAllTickets={showAllTickets}
ticketId={ticketId} ticketId={ticketId}
handleAcepptTicket={handleAcepptTicket} handleAcepptTicket={handleAcepptTicket}
noTicketsTitle="Nada encontrado" noTicketsTitle="Nada encontrado!"
noTicketsMessage="Tente buscar por outro termo" noTicketsMessage="Tente buscar por outro termo."
status="all" status="all"
/> />
{loading && <TicketsSkeleton />}
</List> </List>
{loading && <TicketsSkeleton />}
</Paper> </Paper>
</TabPanel> </TabPanel>
<audio id="sound" preload="auto"> <audio id="sound" preload="auto">

View File

@@ -9012,7 +9012,7 @@ prompts@^2.0.1:
kleur "^3.0.3" kleur "^3.0.3"
sisteransi "^1.0.4" sisteransi "^1.0.4"
prop-types@15.7.2, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2" version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -9242,13 +9242,6 @@ react-fast-compare@^2.0.1:
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
react-infinite-scroll-reverse@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/react-infinite-scroll-reverse/-/react-infinite-scroll-reverse-1.0.3.tgz#d581dff5e7d5fd264b267203cc8c0dc08d2f8e0c"
integrity sha512-sbACmGs42B06eVnsqlCh3z5Qs7/RepuFSEPc31ByrLDFXurhZYdVT4lCB/IvMugevIWwVIOsiN/Pr0JBfhm+IQ==
dependencies:
prop-types "15.7.2"
react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4: react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4:
version "16.13.1" version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"