touchstudy-core 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Chats/ChatContainer.d.ts +6 -0
- package/dist/components/Chats/ChatItem.d.ts +2 -1
- package/dist/components/Chats/ChatList.d.ts +1 -1
- package/dist/components/Chats/configs/types.d.ts +2 -0
- package/dist/components/Chats/hooks/useChatContainer.d.ts +5 -1
- package/dist/components/Chats/hooks/useMessageList.d.ts +2 -1
- package/dist/index.css +2 -1
- package/dist/index.js +171 -74
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +172 -75
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -38,7 +38,7 @@ var BASE_URL = function () {
|
|
38
38
|
}();
|
39
39
|
var PUSHER_CONFIG = {
|
40
40
|
cluster: "ap1",
|
41
|
-
key: "
|
41
|
+
key: "9018c77328885a14150b"
|
42
42
|
};
|
43
43
|
var EXAM_CHANNEL = "presence-exam-channel";
|
44
44
|
var EXAM_STUDENT_CHANNEL = "EXAM-CHANNEL-{examCode}-STUDENT-{studentId}";
|
@@ -1381,11 +1381,10 @@ var MessageStatus;
|
|
1381
1381
|
})(MessageStatus || (MessageStatus = {}));
|
1382
1382
|
|
1383
1383
|
var ChatRightItem = function ChatRightItem(_ref) {
|
1384
|
-
var
|
1384
|
+
var id = _ref.id,
|
1385
|
+
content = _ref.content,
|
1385
1386
|
createdAt = _ref.createdAt,
|
1386
1387
|
isRead = _ref.isRead,
|
1387
|
-
_ref$type = _ref.type,
|
1388
|
-
type = _ref$type === void 0 ? exports.ChatItemType.Default : _ref$type,
|
1389
1388
|
examCode = _ref.examCode,
|
1390
1389
|
isSystemLog = _ref.isSystemLog,
|
1391
1390
|
parentId = _ref.parentId,
|
@@ -1399,8 +1398,11 @@ var ChatRightItem = function ChatRightItem(_ref) {
|
|
1399
1398
|
examTitle = _ref.examTitle,
|
1400
1399
|
parentContent = _ref.parentContent,
|
1401
1400
|
status = _ref.status,
|
1401
|
+
selectedReplyMessageId = _ref.selectedReplyMessageId,
|
1402
|
+
selectedReplyItemRef = _ref.selectedReplyItemRef,
|
1402
1403
|
onAddExamMessage = _ref.onAddExamMessage,
|
1403
|
-
onReTrySendMessage = _ref.onReTrySendMessage
|
1404
|
+
onReTrySendMessage = _ref.onReTrySendMessage,
|
1405
|
+
onGotoParentMessage = _ref.onGotoParentMessage;
|
1404
1406
|
var _useState = React.useState(false),
|
1405
1407
|
isShowTime = _useState[0],
|
1406
1408
|
setShowTime = _useState[1];
|
@@ -1425,16 +1427,17 @@ var ChatRightItem = function ChatRightItem(_ref) {
|
|
1425
1427
|
setShowTime(isSystemLog || !!isFirst);
|
1426
1428
|
}, [isFirst, isSystemLog]);
|
1427
1429
|
return React__default.createElement("li", {
|
1430
|
+
ref: selectedReplyMessageId === id ? selectedReplyItemRef : undefined,
|
1428
1431
|
className: "px-3 " + (!isLast ? "pb-1" : "pb-3") + " " + (!!examCode ? "border border-top-0 border-info" : "") + " " + (!!examCode && isLast ? "border-bottom-1 mb-3" : "border-bottom-0")
|
1429
1432
|
}, showExamHeader && isFirst && React__default.createElement("div", {
|
1430
1433
|
className: "d-flex bg-info justify-content-between px-3 mb-3 py-1 " + styles$1["list__item__header"]
|
1431
1434
|
}, React__default.createElement(reactRouterDom.Link, {
|
1432
1435
|
to: "" + (actionLink || "/"),
|
1433
1436
|
className: "text-black"
|
1434
|
-
}, examTitle), !!examId && !!examTitle && React__default.createElement("span", {
|
1437
|
+
}, examTitle), !!examId && !!examTitle && !!examCode && React__default.createElement("span", {
|
1435
1438
|
className: "pointer text-black",
|
1436
1439
|
onClick: function onClick() {
|
1437
|
-
return onAddExamMessage === null || onAddExamMessage === void 0 ? void 0 : onAddExamMessage(examId, examTitle);
|
1440
|
+
return onAddExamMessage === null || onAddExamMessage === void 0 ? void 0 : onAddExamMessage(examId, examTitle, examCode);
|
1438
1441
|
}
|
1439
1442
|
}, "Add message to exam")), isSystemLog || !!isFirst ? React__default.createElement("p", {
|
1440
1443
|
className: "mb-0 py-1 px-3 fs-6 text-muted text-center"
|
@@ -1454,14 +1457,17 @@ var ChatRightItem = function ChatRightItem(_ref) {
|
|
1454
1457
|
}, React__default.createElement("div", {
|
1455
1458
|
className: "d-flex flex-column align-items-end"
|
1456
1459
|
}, parentId && React__default.createElement("p", {
|
1457
|
-
className: "
|
1460
|
+
className: "px-3 bg-light opacity-50 pointer " + styles$1["list__item__message"] + " " + styles$1["list__item__message--reply-from-right"] + " mb-0 fw-medium " + styles$1["reply-text"],
|
1461
|
+
onClick: function onClick() {
|
1462
|
+
return onGotoParentMessage === null || onGotoParentMessage === void 0 ? void 0 : onGotoParentMessage(parentId);
|
1463
|
+
}
|
1458
1464
|
}, React__default.createElement("b", null, "Reply To:"), " ", parentContent), React__default.createElement("p", {
|
1459
1465
|
className: "mb-0 py-2 px-3 fw-medium pointer " + styles$1["list__item__message"] + " " + (parentId ? styles$1["list__item__message--reply-right"] : "") + " text-end bg-primary text-white",
|
1460
1466
|
onClick: handleShowInfo
|
1461
1467
|
}, content), status !== MessageStatus.Default && React__default.createElement("p", {
|
1462
1468
|
onClick: handleReTrySendMessage,
|
1463
1469
|
className: "fs-6 mb-0 " + (status === MessageStatus.SentError ? "text-danger text-decoration-underline pointer" : "")
|
1464
|
-
}, status),
|
1470
|
+
}, status), !isSystemLog && status === MessageStatus.Default && React__default.createElement(reactstrap.Collapse, {
|
1465
1471
|
isOpen: isShowInfo
|
1466
1472
|
}, React__default.createElement("p", {
|
1467
1473
|
className: "mb-0 py-1 px-3 fs-6 text-muted text-end"
|
@@ -1489,7 +1495,8 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
|
|
1489
1495
|
onReply = _ref.onReply,
|
1490
1496
|
selectedReplyMessageId = _ref.selectedReplyMessageId,
|
1491
1497
|
onToggleReply = _ref.onToggleReply,
|
1492
|
-
selectedReplyItemRef = _ref.selectedReplyItemRef
|
1498
|
+
selectedReplyItemRef = _ref.selectedReplyItemRef,
|
1499
|
+
onGotoParentMessage = _ref.onGotoParentMessage;
|
1493
1500
|
var _useState = React.useState(false),
|
1494
1501
|
isShowTime = _useState[0],
|
1495
1502
|
setShowTime = _useState[1];
|
@@ -1517,10 +1524,10 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
|
|
1517
1524
|
}, React__default.createElement(reactRouterDom.Link, {
|
1518
1525
|
to: "" + (actionLink || "/"),
|
1519
1526
|
className: "text-black"
|
1520
|
-
}, examTitle), !!examId && !!examTitle && React__default.createElement("span", {
|
1527
|
+
}, examTitle), !!examId && !!examTitle && !!examCode && React__default.createElement("span", {
|
1521
1528
|
className: "pointer text-black",
|
1522
1529
|
onClick: function onClick() {
|
1523
|
-
return onAddExamMessage === null || onAddExamMessage === void 0 ? void 0 : onAddExamMessage(examId, examTitle);
|
1530
|
+
return onAddExamMessage === null || onAddExamMessage === void 0 ? void 0 : onAddExamMessage(examId, examTitle, examCode);
|
1524
1531
|
}
|
1525
1532
|
}, "Add message to exam")), isSystemLog || !!isFirst ? React__default.createElement("p", {
|
1526
1533
|
className: "mb-0 py-1 px-3 fs-6 text-muted text-center"
|
@@ -1545,7 +1552,10 @@ var ChatLeftItem = function ChatLeftItem(_ref) {
|
|
1545
1552
|
})), React__default.createElement("div", {
|
1546
1553
|
className: "d-flex flex-column"
|
1547
1554
|
}, parentId && React__default.createElement("p", {
|
1548
|
-
className: "opacity-50 mb-0
|
1555
|
+
className: "opacity-50 mb-0 px-3 fw-medium pointer " + styles$1["list__item__message"] + " " + styles$1["list__item__message--reply-from"] + " " + styles$1["reply-text"] + " text-start bg-light",
|
1556
|
+
onClick: function onClick() {
|
1557
|
+
return onGotoParentMessage === null || onGotoParentMessage === void 0 ? void 0 : onGotoParentMessage(parentId);
|
1558
|
+
}
|
1549
1559
|
}, React__default.createElement("b", null, "Reply To:"), " ", parentContent), React__default.createElement("p", {
|
1550
1560
|
className: "mb-0 py-2 px-3 fw-medium pointer " + styles$1["list__item__message"] + " " + (parentId ? styles$1["list__item__message--reply"] : "") + " text-start bg-light",
|
1551
1561
|
onClick: handleShowInfo
|
@@ -1585,6 +1595,11 @@ var ChatList = function ChatList(_ref) {
|
|
1585
1595
|
var handleToggleReply = function handleToggleReply(id) {
|
1586
1596
|
setSelectedReplyMessageId(id === selectedReplyMessageId ? undefined : id);
|
1587
1597
|
};
|
1598
|
+
var handleSelectParentMessage = function handleSelectParentMessage(id) {
|
1599
|
+
if (id === selectedReplyMessageId) selectedReplyItemRef.current && selectedReplyItemRef.current.scrollIntoView({
|
1600
|
+
behavior: "smooth"
|
1601
|
+
});else setSelectedReplyMessageId(id);
|
1602
|
+
};
|
1588
1603
|
React.useEffect(function () {
|
1589
1604
|
selectedReplyMessageId && selectedReplyItemRef.current && selectedReplyItemRef.current.scrollIntoView({
|
1590
1605
|
behavior: "smooth"
|
@@ -1607,7 +1622,8 @@ var ChatList = function ChatList(_ref) {
|
|
1607
1622
|
selectedReplyMessageId: selectedReplyMessageId,
|
1608
1623
|
onToggleReply: handleToggleReply,
|
1609
1624
|
selectedReplyItemRef: selectedReplyItemRef,
|
1610
|
-
onReTrySendMessage: onReTrySendMessage
|
1625
|
+
onReTrySendMessage: onReTrySendMessage,
|
1626
|
+
onGotoParentMessage: handleSelectParentMessage
|
1611
1627
|
}));
|
1612
1628
|
}));
|
1613
1629
|
};
|
@@ -1722,7 +1738,15 @@ var ChatContainer = function ChatContainer(_ref) {
|
|
1722
1738
|
var chatHeaderProps = _ref.chatHeaderProps,
|
1723
1739
|
chatListProps = _ref.chatListProps,
|
1724
1740
|
inputProps = _ref.inputProps,
|
1725
|
-
|
1741
|
+
_ref$scrollOffset = _ref.scrollOffset,
|
1742
|
+
scrollOffset = _ref$scrollOffset === void 0 ? 0 : _ref$scrollOffset,
|
1743
|
+
_ref$isLoading = _ref.isLoading,
|
1744
|
+
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
|
1745
|
+
isScrollToEnd = _ref.isScrollToEnd,
|
1746
|
+
onRead = _ref.onRead,
|
1747
|
+
onReachTop = _ref.onReachTop,
|
1748
|
+
onReachBottom = _ref.onReachBottom,
|
1749
|
+
onEndScrollToEnd = _ref.onEndScrollToEnd;
|
1726
1750
|
var onReply = chatListProps.onReply,
|
1727
1751
|
onAddExamMessage = chatListProps.onAddExamMessage;
|
1728
1752
|
var onChangeOption = chatHeaderProps.onChangeOption;
|
@@ -1737,10 +1761,10 @@ var ChatContainer = function ChatContainer(_ref) {
|
|
1737
1761
|
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
1738
1762
|
onReply === null || onReply === void 0 ? void 0 : onReply(id, content, examId);
|
1739
1763
|
};
|
1740
|
-
var handleAddExamMessage = function handleAddExamMessage(examId, examTitle) {
|
1764
|
+
var handleAddExamMessage = function handleAddExamMessage(examId, examTitle, examCode) {
|
1741
1765
|
var _inputRef$current2;
|
1742
1766
|
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
1743
|
-
onAddExamMessage(examId, examTitle);
|
1767
|
+
onAddExamMessage(examId, examTitle, examCode);
|
1744
1768
|
};
|
1745
1769
|
var handleChangeExamOption = function handleChangeExamOption(val) {
|
1746
1770
|
var _inputRef$current3;
|
@@ -1748,6 +1772,16 @@ var ChatContainer = function ChatContainer(_ref) {
|
|
1748
1772
|
onChangeOption === null || onChangeOption === void 0 ? void 0 : onChangeOption(val);
|
1749
1773
|
};
|
1750
1774
|
var handleScroll = function handleScroll() {
|
1775
|
+
if (listRef.current) {
|
1776
|
+
var scrollTop = listRef.current.scrollTop;
|
1777
|
+
var scrollHeight = listRef.current.scrollHeight;
|
1778
|
+
var clientHeight = listRef.current.clientHeight;
|
1779
|
+
if (scrollTop + clientHeight + scrollOffset >= scrollHeight) {
|
1780
|
+
onReachBottom === null || onReachBottom === void 0 ? void 0 : onReachBottom();
|
1781
|
+
} else if (scrollTop <= scrollOffset) {
|
1782
|
+
onReachTop === null || onReachTop === void 0 ? void 0 : onReachTop();
|
1783
|
+
}
|
1784
|
+
}
|
1751
1785
|
if (scrollRef.current) clearTimeout(scrollRef.current);
|
1752
1786
|
scrollRef.current = setTimeout(function () {
|
1753
1787
|
onRead === null || onRead === void 0 ? void 0 : onRead();
|
@@ -1757,36 +1791,40 @@ var ChatContainer = function ChatContainer(_ref) {
|
|
1757
1791
|
if (focusRef.current) clearTimeout(focusRef.current);
|
1758
1792
|
focusRef.current = setTimeout(function () {
|
1759
1793
|
onRead === null || onRead === void 0 ? void 0 : onRead();
|
1760
|
-
},
|
1794
|
+
}, 300);
|
1761
1795
|
};
|
1762
1796
|
React.useEffect(function () {
|
1763
|
-
var _listRef$current,
|
1797
|
+
var _listRef$current, _chatListProps$messag, _listRef$current3;
|
1764
1798
|
scrollRef.current && clearTimeout(scrollRef.current);
|
1765
1799
|
addEventTimeout.current && clearTimeout(addEventTimeout.current);
|
1766
1800
|
(_listRef$current = listRef.current) === null || _listRef$current === void 0 ? void 0 : _listRef$current.removeEventListener("scroll", handleScroll);
|
1767
|
-
(
|
1768
|
-
|
1769
|
-
|
1770
|
-
|
1771
|
-
|
1772
|
-
|
1773
|
-
|
1801
|
+
if (isScrollToEnd && !isLoading && (_chatListProps$messag = chatListProps.messages) !== null && _chatListProps$messag !== void 0 && _chatListProps$messag.length) {
|
1802
|
+
var _listItemRef$current, _listItemRef$current$;
|
1803
|
+
(_listItemRef$current = listItemRef.current) === null || _listItemRef$current === void 0 ? void 0 : (_listItemRef$current$ = _listItemRef$current.lastElementChild) === null || _listItemRef$current$ === void 0 ? void 0 : _listItemRef$current$.scrollIntoView({
|
1804
|
+
behavior: "smooth"
|
1805
|
+
});
|
1806
|
+
onEndScrollToEnd === null || onEndScrollToEnd === void 0 ? void 0 : onEndScrollToEnd();
|
1807
|
+
addEventTimeout.current = setTimeout(function () {
|
1808
|
+
var _listRef$current2;
|
1809
|
+
(_listRef$current2 = listRef.current) === null || _listRef$current2 === void 0 ? void 0 : _listRef$current2.addEventListener("scroll", handleScroll);
|
1810
|
+
}, 800);
|
1811
|
+
} else (_listRef$current3 = listRef.current) === null || _listRef$current3 === void 0 ? void 0 : _listRef$current3.addEventListener("scroll", handleScroll);
|
1774
1812
|
return function () {
|
1775
|
-
var _listRef$
|
1776
|
-
(_listRef$
|
1813
|
+
var _listRef$current4;
|
1814
|
+
(_listRef$current4 = listRef.current) === null || _listRef$current4 === void 0 ? void 0 : _listRef$current4.removeEventListener("scroll", handleScroll);
|
1777
1815
|
scrollRef.current && clearTimeout(scrollRef.current);
|
1778
1816
|
addEventTimeout.current && clearTimeout(addEventTimeout.current);
|
1779
1817
|
};
|
1780
|
-
}, [
|
1818
|
+
}, [JSON.stringify(chatListProps.messages), scrollOffset, isLoading, onEndScrollToEnd, onRead, isScrollToEnd]);
|
1781
1819
|
React.useEffect(function () {
|
1782
1820
|
var _inputRef$current4;
|
1783
1821
|
(_inputRef$current4 = inputRef.current) === null || _inputRef$current4 === void 0 ? void 0 : _inputRef$current4.addEventListener("focus", handleFocus);
|
1784
1822
|
return function () {
|
1785
1823
|
var _inputRef$current5;
|
1786
1824
|
(_inputRef$current5 = inputRef.current) === null || _inputRef$current5 === void 0 ? void 0 : _inputRef$current5.removeEventListener("focus", handleFocus);
|
1787
|
-
|
1825
|
+
focusRef.current && clearTimeout(focusRef.current);
|
1788
1826
|
};
|
1789
|
-
}, []);
|
1827
|
+
}, [onRead]);
|
1790
1828
|
return React__default.createElement("div", {
|
1791
1829
|
className: "d-flex flex-column w-100 h-100 border border-1 border-light rounded-3 shadow-sm"
|
1792
1830
|
}, React__default.createElement("div", null, React__default.createElement(ChatHeader, Object.assign({}, chatHeaderProps, {
|
@@ -1794,7 +1832,12 @@ var ChatContainer = function ChatContainer(_ref) {
|
|
1794
1832
|
}))), React__default.createElement("div", {
|
1795
1833
|
ref: listRef,
|
1796
1834
|
className: "flex-grow-1 " + styles$1["body"]
|
1797
|
-
}, React__default.createElement(
|
1835
|
+
}, isLoading && React__default.createElement("div", {
|
1836
|
+
className: "d-flex justify-content-center"
|
1837
|
+
}, React__default.createElement(reactstrap.Spinner, {
|
1838
|
+
color: "secondary",
|
1839
|
+
className: "my-2"
|
1840
|
+
}, "Loading...")), React__default.createElement(ChatList, Object.assign({}, chatListProps, {
|
1798
1841
|
listItemRef: listItemRef,
|
1799
1842
|
onReply: handleReply,
|
1800
1843
|
onAddExamMessage: handleAddExamMessage
|
@@ -1843,7 +1886,7 @@ var CONVERSATION_DEFAULT_FILTER = {
|
|
1843
1886
|
};
|
1844
1887
|
var MESSAGE_DEFAULT_FILTER = {
|
1845
1888
|
currentPage: 1,
|
1846
|
-
pageSize:
|
1889
|
+
pageSize: 12,
|
1847
1890
|
textSearch: "",
|
1848
1891
|
sortColumnDirection: OrderBy.DESC,
|
1849
1892
|
sortColumnName: MessageSortBy.CreatedAt
|
@@ -1903,43 +1946,68 @@ var useMessageList = function useMessageList(userId, getListExamOptions) {
|
|
1903
1946
|
var _useState2 = React.useState(MESSAGE_DEFAULT_FILTER),
|
1904
1947
|
messageFilter = _useState2[0],
|
1905
1948
|
setMessageFilter = _useState2[1];
|
1949
|
+
var _useState3 = React.useState(false),
|
1950
|
+
isLoading = _useState3[0],
|
1951
|
+
setLoading = _useState3[1];
|
1906
1952
|
var getMessageList = function getMessageList(conversationId, examId) {
|
1907
1953
|
try {
|
1908
|
-
var
|
1909
|
-
|
1910
|
-
}
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
1914
|
-
|
1915
|
-
}
|
1916
|
-
|
1917
|
-
|
1954
|
+
var _temp3 = function _temp3() {
|
1955
|
+
setLoading(false);
|
1956
|
+
};
|
1957
|
+
setLoading(true);
|
1958
|
+
var _temp2 = _catch(function () {
|
1959
|
+
var filter = _extends({}, messageFilter, {
|
1960
|
+
examId: !examId ? messageFilter.examId : examId
|
1961
|
+
});
|
1962
|
+
return Promise.resolve(getMessagesByConversation(conversationId, filter)).then(function (res) {
|
1963
|
+
function _temp(_getListExamOptions) {
|
1964
|
+
_getListExamOptions;
|
1965
|
+
}
|
1966
|
+
setMessages(function (state) {
|
1967
|
+
var _res$data$items;
|
1968
|
+
return [].concat(((_res$data$items = res.data.items) === null || _res$data$items === void 0 ? void 0 : _res$data$items.reverse()) || [], state);
|
1969
|
+
});
|
1970
|
+
return getListExamOptions ? Promise.resolve(!!getListExamOptions && getListExamOptions(userId)).then(_temp) : _temp(!!getListExamOptions && getListExamOptions(userId));
|
1971
|
+
});
|
1972
|
+
}, function (error) {
|
1973
|
+
console.log({
|
1974
|
+
error: error
|
1975
|
+
});
|
1918
1976
|
});
|
1977
|
+
return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(_temp3) : _temp3(_temp2));
|
1919
1978
|
} catch (e) {
|
1920
1979
|
return Promise.reject(e);
|
1921
1980
|
}
|
1922
1981
|
};
|
1982
|
+
var handleLoadMore = function handleLoadMore() {
|
1983
|
+
if (isLoading) return;
|
1984
|
+
var lastItem = messages[0];
|
1985
|
+
if (!lastItem) return;
|
1986
|
+
var newFilter = _extends({}, messageFilter, {
|
1987
|
+
currentPage: 1,
|
1988
|
+
beforeDate: lastItem.createdAt
|
1989
|
+
});
|
1990
|
+
setMessageFilter(newFilter);
|
1991
|
+
return JSON.stringify(newFilter) === JSON.stringify(messageFilter);
|
1992
|
+
};
|
1923
1993
|
var handleMarkReadMessage = function handleMarkReadMessage(conversationId, messageId) {
|
1924
1994
|
try {
|
1925
|
-
var
|
1995
|
+
var _temp4 = _catch(function () {
|
1926
1996
|
return Promise.resolve(apiMarkReadMessage(conversationId, messageId)).then(function () {});
|
1927
1997
|
}, function (error) {
|
1928
1998
|
console.log({
|
1929
1999
|
error: error
|
1930
2000
|
});
|
1931
2001
|
});
|
1932
|
-
return Promise.resolve(
|
2002
|
+
return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(function () {}) : void 0);
|
1933
2003
|
} catch (e) {
|
1934
2004
|
return Promise.reject(e);
|
1935
2005
|
}
|
1936
2006
|
};
|
1937
2007
|
var resetMessages = function resetMessages() {
|
2008
|
+
setMessageFilter(MESSAGE_DEFAULT_FILTER);
|
1938
2009
|
setMessages([]);
|
1939
2010
|
};
|
1940
|
-
var handleChangeMessageFilter = function handleChangeMessageFilter(filter) {
|
1941
|
-
setMessageFilter(_extends({}, messageFilter, filter));
|
1942
|
-
};
|
1943
2011
|
var handleChangeExamId = function handleChangeExamId(value) {
|
1944
2012
|
setMessageFilter(_extends({}, messageFilter, {
|
1945
2013
|
examId: value === null || value === void 0 ? void 0 : value.value,
|
@@ -1947,14 +2015,15 @@ var useMessageList = function useMessageList(userId, getListExamOptions) {
|
|
1947
2015
|
}));
|
1948
2016
|
};
|
1949
2017
|
return {
|
2018
|
+
isLoading: isLoading,
|
1950
2019
|
messageFilter: messageFilter,
|
1951
2020
|
messages: messages,
|
1952
2021
|
getMessageList: getMessageList,
|
1953
2022
|
setMessages: setMessages,
|
1954
2023
|
resetMessages: resetMessages,
|
1955
|
-
handleChangeMessageFilter: handleChangeMessageFilter,
|
1956
2024
|
handleChangeExamId: handleChangeExamId,
|
1957
|
-
handleMarkReadMessage: handleMarkReadMessage
|
2025
|
+
handleMarkReadMessage: handleMarkReadMessage,
|
2026
|
+
handleLoadMore: handleLoadMore
|
1958
2027
|
};
|
1959
2028
|
};
|
1960
2029
|
|
@@ -1970,6 +2039,7 @@ var useChatContainer = function useChatContainer(props) {
|
|
1970
2039
|
var channel = React.useRef();
|
1971
2040
|
var channelName = React.useRef();
|
1972
2041
|
var loadingRef = React.useRef(false);
|
2042
|
+
var firstLoadRef = React.useRef(true);
|
1973
2043
|
var dispatch = reactRedux.useDispatch();
|
1974
2044
|
var roles = reactRedux.useSelector(function (state) {
|
1975
2045
|
var _state$common, _state$common$user;
|
@@ -1985,16 +2055,26 @@ var useChatContainer = function useChatContainer(props) {
|
|
1985
2055
|
var _useState3 = React.useState(MessageStatus.Default),
|
1986
2056
|
messageStatus = _useState3[0],
|
1987
2057
|
setMessageStatus = _useState3[1];
|
2058
|
+
var _useState4 = React.useState(true),
|
2059
|
+
isScrollToEnd = _useState4[0],
|
2060
|
+
setScrollToEnd = _useState4[1];
|
1988
2061
|
var _useExamList = useExamList(isStudent),
|
1989
2062
|
exams = _useExamList.exams,
|
1990
2063
|
getListExam = _useExamList.getListExam;
|
1991
2064
|
var _useMessageList = useMessageList(isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation = selectedConversation.teacher) === null || _selectedConversation === void 0 ? void 0 : _selectedConversation.id : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation2 = selectedConversation.student) === null || _selectedConversation2 === void 0 ? void 0 : _selectedConversation2.id, !userId ? getListExam : undefined),
|
2065
|
+
isLoadingMessages = _useMessageList.isLoading,
|
1992
2066
|
messages = _useMessageList.messages,
|
1993
2067
|
messageFilter = _useMessageList.messageFilter,
|
1994
2068
|
getMessageList = _useMessageList.getMessageList,
|
1995
2069
|
resetMessages = _useMessageList.resetMessages,
|
1996
2070
|
handleChangeExamId = _useMessageList.handleChangeExamId,
|
1997
|
-
setMessages = _useMessageList.setMessages
|
2071
|
+
setMessages = _useMessageList.setMessages,
|
2072
|
+
handleLoadMore = _useMessageList.handleLoadMore;
|
2073
|
+
var handleToggleScrollToEnd = function handleToggleScrollToEnd() {
|
2074
|
+
setScrollToEnd(function (state) {
|
2075
|
+
return !state;
|
2076
|
+
});
|
2077
|
+
};
|
1998
2078
|
var handleAddMessage = function handleAddMessage() {
|
1999
2079
|
try {
|
2000
2080
|
var _message$content, _message$content$trim;
|
@@ -2007,6 +2087,7 @@ var useChatContainer = function useChatContainer(props) {
|
|
2007
2087
|
})) return Promise.resolve();
|
2008
2088
|
loadingRef.current = true;
|
2009
2089
|
if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id) || !(message !== null && message !== void 0 && (_message$content = message.content) !== null && _message$content !== void 0 && (_message$content$trim = _message$content.trim()) !== null && _message$content$trim !== void 0 && _message$content$trim.length)) return Promise.resolve();
|
2090
|
+
setScrollToEnd(true);
|
2010
2091
|
setMessages(function (state) {
|
2011
2092
|
return [].concat(state, [{
|
2012
2093
|
id: 0,
|
@@ -2019,7 +2100,7 @@ var useChatContainer = function useChatContainer(props) {
|
|
2019
2100
|
id: message.examId,
|
2020
2101
|
startTime: moment().format("YYYY-MM-DDTHH:mm:ss"),
|
2021
2102
|
title: message.examTitle || "",
|
2022
|
-
code: "
|
2103
|
+
code: message.examCode || "",
|
2023
2104
|
createdAt: moment().format("YYYY-MM-DDTHH:mm:ss")
|
2024
2105
|
} : undefined,
|
2025
2106
|
isRead: false,
|
@@ -2059,14 +2140,16 @@ var useChatContainer = function useChatContainer(props) {
|
|
2059
2140
|
return Promise.reject(e);
|
2060
2141
|
}
|
2061
2142
|
};
|
2062
|
-
var handleAddExamMessage = function handleAddExamMessage(examId, title) {
|
2143
|
+
var handleAddExamMessage = function handleAddExamMessage(examId, title, examCode) {
|
2063
2144
|
setMessage(!!message ? _extends({}, message, {
|
2064
2145
|
examId: examId,
|
2146
|
+
examCode: examCode,
|
2065
2147
|
examTitle: title,
|
2066
2148
|
parentId: undefined,
|
2067
2149
|
parentContent: ""
|
2068
2150
|
}) : {
|
2069
2151
|
examId: examId,
|
2152
|
+
examCode: examCode,
|
2070
2153
|
content: "",
|
2071
2154
|
examTitle: title,
|
2072
2155
|
parentId: undefined,
|
@@ -2158,7 +2241,8 @@ var useChatContainer = function useChatContainer(props) {
|
|
2158
2241
|
return results;
|
2159
2242
|
}, [JSON.stringify(messages), JSON.stringify(message), isStudent, JSON.stringify(selectedConversation), messageFilter.examId, isStudent, userId, messageStatus]);
|
2160
2243
|
var handleNewMessageSent = function handleNewMessageSent(data) {
|
2161
|
-
if (!messageFilter.examId || messageFilter.examId && data.examId === messageFilter.examId) {
|
2244
|
+
if (!messageFilter.examId && !examId || messageFilter.examId && data.examId === messageFilter.examId || examId && examId === data.examId) {
|
2245
|
+
setScrollToEnd(true);
|
2162
2246
|
setMessages(function (state) {
|
2163
2247
|
if (state.some(function (i) {
|
2164
2248
|
return i.id === 0;
|
@@ -2178,6 +2262,11 @@ var useChatContainer = function useChatContainer(props) {
|
|
2178
2262
|
}));
|
2179
2263
|
});
|
2180
2264
|
};
|
2265
|
+
var handleLoadMoreMessages = function handleLoadMoreMessages() {
|
2266
|
+
if (handleLoadMore()) {
|
2267
|
+
getMessageConversation();
|
2268
|
+
}
|
2269
|
+
};
|
2181
2270
|
var cleanupPusher = function cleanupPusher() {
|
2182
2271
|
var _pusher$current, _pusher$current2;
|
2183
2272
|
(_pusher$current = pusher.current) === null || _pusher$current === void 0 ? void 0 : _pusher$current.unbind("new-message-event", handleNewMessageSent);
|
@@ -2203,13 +2292,15 @@ var useChatContainer = function useChatContainer(props) {
|
|
2203
2292
|
pusher.current.bind("message-read-event", handleMessageMarkRead);
|
2204
2293
|
}
|
2205
2294
|
return cleanupPusher;
|
2206
|
-
}, [selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, messageFilter.examId]);
|
2295
|
+
}, [selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id, messageFilter.examId, examId]);
|
2207
2296
|
React.useEffect(function () {
|
2208
2297
|
var getConversation = function getConversation() {
|
2209
2298
|
try {
|
2210
2299
|
var _temp6 = function _temp6() {
|
2211
2300
|
dispatch(setLoading(false));
|
2212
2301
|
};
|
2302
|
+
resetMessages();
|
2303
|
+
setScrollToEnd(true);
|
2213
2304
|
if ((conversation === null || conversation === void 0 ? void 0 : conversation.id) !== undefined) {
|
2214
2305
|
setSelectedConversation(conversation);
|
2215
2306
|
return Promise.resolve();
|
@@ -2242,7 +2333,7 @@ var useChatContainer = function useChatContainer(props) {
|
|
2242
2333
|
};
|
2243
2334
|
getConversation();
|
2244
2335
|
}, [conversation === null || conversation === void 0 ? void 0 : conversation.id, userId]);
|
2245
|
-
var handleMarkRead = function
|
2336
|
+
var handleMarkRead = React.useCallback(function () {
|
2246
2337
|
try {
|
2247
2338
|
if (!(selectedConversation !== null && selectedConversation !== void 0 && selectedConversation.id)) return Promise.resolve();
|
2248
2339
|
var _temp7 = _catch(function () {
|
@@ -2256,17 +2347,12 @@ var useChatContainer = function useChatContainer(props) {
|
|
2256
2347
|
} catch (e) {
|
2257
2348
|
return Promise.reject(e);
|
2258
2349
|
}
|
2259
|
-
};
|
2350
|
+
}, [selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id]);
|
2260
2351
|
var getMessageConversation = function getMessageConversation() {
|
2261
2352
|
try {
|
2262
|
-
var _temp12 = function _temp12() {
|
2263
|
-
dispatch(setLoading(false));
|
2264
|
-
};
|
2265
2353
|
if (!roles.length) return Promise.resolve();
|
2266
2354
|
if ((selectedConversation === null || selectedConversation === void 0 ? void 0 : selectedConversation.id) === undefined) return Promise.resolve();
|
2267
|
-
|
2268
|
-
dispatch(setLoading(true));
|
2269
|
-
var _temp11 = _catch(function () {
|
2355
|
+
return Promise.resolve(_catch(function () {
|
2270
2356
|
var _temp10 = function () {
|
2271
2357
|
if (selectedConversation.id === 0) {
|
2272
2358
|
var _userId = isStudent ? selectedConversation.teacher.id : selectedConversation.student.id;
|
@@ -2281,7 +2367,11 @@ var useChatContainer = function useChatContainer(props) {
|
|
2281
2367
|
});
|
2282
2368
|
};
|
2283
2369
|
var _temp8 = function () {
|
2284
|
-
if (
|
2370
|
+
if (firstLoadRef.current) {
|
2371
|
+
return Promise.resolve(handleMarkRead()).then(function () {
|
2372
|
+
firstLoadRef.current = false;
|
2373
|
+
});
|
2374
|
+
}
|
2285
2375
|
}();
|
2286
2376
|
return _temp8 && _temp8.then ? _temp8.then(_temp9) : _temp9(_temp8);
|
2287
2377
|
}
|
@@ -2289,21 +2379,24 @@ var useChatContainer = function useChatContainer(props) {
|
|
2289
2379
|
if (_temp10 && _temp10.then) return _temp10.then(function () {});
|
2290
2380
|
}, function () {
|
2291
2381
|
reactToastify.toast.error("Fail to fetch data!");
|
2292
|
-
});
|
2293
|
-
return Promise.resolve(_temp11 && _temp11.then ? _temp11.then(_temp12) : _temp12(_temp11));
|
2382
|
+
}));
|
2294
2383
|
} catch (e) {
|
2295
2384
|
return Promise.reject(e);
|
2296
2385
|
}
|
2297
2386
|
};
|
2387
|
+
var handleConversationChange = function handleConversationChange() {
|
2388
|
+
resetMessages();
|
2389
|
+
setScrollToEnd(true);
|
2390
|
+
};
|
2298
2391
|
React.useEffect(function () {
|
2299
2392
|
getMessageConversation();
|
2300
|
-
}, [
|
2301
|
-
var userName = isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation3 = selectedConversation.teacher) === null || _selectedConversation3 === void 0 ? void 0 : _selectedConversation3.displayName : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation4 = selectedConversation.student) === null || _selectedConversation4 === void 0 ? void 0 : _selectedConversation4.displayName;
|
2302
|
-
var userAvatar = isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation5 = selectedConversation.teacher) === null || _selectedConversation5 === void 0 ? void 0 : _selectedConversation5.avatar : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation6 = selectedConversation.student) === null || _selectedConversation6 === void 0 ? void 0 : _selectedConversation6.avatar;
|
2393
|
+
}, [JSON.stringify(selectedConversation), JSON.stringify(roles), JSON.stringify(messageFilter), examId]);
|
2394
|
+
var userName = (isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation3 = selectedConversation.teacher) === null || _selectedConversation3 === void 0 ? void 0 : _selectedConversation3.displayName : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation4 = selectedConversation.student) === null || _selectedConversation4 === void 0 ? void 0 : _selectedConversation4.displayName) || "";
|
2395
|
+
var userAvatar = (isStudent ? selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation5 = selectedConversation.teacher) === null || _selectedConversation5 === void 0 ? void 0 : _selectedConversation5.avatar : selectedConversation === null || selectedConversation === void 0 ? void 0 : (_selectedConversation6 = selectedConversation.student) === null || _selectedConversation6 === void 0 ? void 0 : _selectedConversation6.avatar) || "";
|
2303
2396
|
return {
|
2304
2397
|
chatHeaderProps: {
|
2305
|
-
name: userName
|
2306
|
-
avatar: userAvatar
|
2398
|
+
name: userName,
|
2399
|
+
avatar: userAvatar,
|
2307
2400
|
options: exams,
|
2308
2401
|
onChangeOption: handleFilterExam
|
2309
2402
|
},
|
@@ -2321,15 +2414,19 @@ var useChatContainer = function useChatContainer(props) {
|
|
2321
2414
|
onSubmit: handleAddMessage,
|
2322
2415
|
onClearReply: !messageFilter.examId || message !== null && message !== void 0 && message.parentContent ? handleClearReply : undefined
|
2323
2416
|
},
|
2417
|
+
isScrollToEnd: isScrollToEnd,
|
2418
|
+
isLoadingMessages: isLoadingMessages,
|
2324
2419
|
exams: exams,
|
2325
2420
|
messageList: messageList,
|
2326
2421
|
selectedConversation: selectedConversation,
|
2327
2422
|
messageStatus: messageStatus,
|
2328
2423
|
messageFilter: messageFilter,
|
2424
|
+
handleToggleScrollToEnd: handleToggleScrollToEnd,
|
2425
|
+
handleLoadMoreMessages: handleLoadMoreMessages,
|
2329
2426
|
getMessageList: getMessageList,
|
2330
2427
|
handleFilterExam: handleFilterExam,
|
2331
2428
|
setMessage: setMessage,
|
2332
|
-
resetMessages:
|
2429
|
+
resetMessages: handleConversationChange,
|
2333
2430
|
getMessageConversation: getMessageConversation,
|
2334
2431
|
handleMarkRead: handleMarkRead
|
2335
2432
|
};
|
@@ -2369,8 +2466,8 @@ var useConversationList = function useConversationList() {
|
|
2369
2466
|
return i.id === val.id;
|
2370
2467
|
});
|
2371
2468
|
if (index > -1 && JSON.stringify(val) !== JSON.stringify(state[index])) {
|
2372
|
-
return [].concat(state.slice(0, index),
|
2373
|
-
} else return [].concat(state
|
2469
|
+
return [val].concat(state.slice(0, index), state.slice(index + 1));
|
2470
|
+
} else return [val].concat(state);
|
2374
2471
|
});
|
2375
2472
|
setSelectedConversation(function (state) {
|
2376
2473
|
if (!state) return val;
|