sceyt-chat-react-uikit 1.8.9-beta.16 → 1.8.9-beta.18
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/components/SendMessageInput/sendMessageUtils.d.ts +10 -0
- package/index.js +79 -65
- package/index.modern.js +79 -65
- package/package.json +1 -1
|
@@ -1 +1,11 @@
|
|
|
1
1
|
export declare const hasSendableTextOrPoll: (messageText: string, isPoll: boolean) => boolean;
|
|
2
|
+
export declare const DEFAULT_MEDIA_EXTENSIONS: string[];
|
|
3
|
+
export declare const isDefaultSupportedMediaMimeType: (mimeType: string) => boolean;
|
|
4
|
+
declare type MediaAttachmentValidationOptions = {
|
|
5
|
+
allowedExtensions?: string[];
|
|
6
|
+
sizeLimitKb?: number;
|
|
7
|
+
invalidTypeMessage?: string;
|
|
8
|
+
sizeLimitMessage?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const getMediaAttachmentValidationError: (file: Pick<File, 'name' | 'size'>, { allowedExtensions, sizeLimitKb, invalidTypeMessage, sizeLimitMessage }: MediaAttachmentValidationOptions) => string | null;
|
|
11
|
+
export {};
|
package/index.js
CHANGED
|
@@ -46854,6 +46854,10 @@ function useChatController(_ref5) {
|
|
|
46854
46854
|
var highlightTimeoutRef = React.useRef(null);
|
|
46855
46855
|
var unreadRestoreCompletedRef = React.useRef(false);
|
|
46856
46856
|
var previousUnreadScrollToRef = React.useRef(unreadScrollTo);
|
|
46857
|
+
var unreadScrollToRef = React.useRef(unreadScrollTo);
|
|
46858
|
+
var tabIsActiveRef = React.useRef(tabIsActive);
|
|
46859
|
+
var hasNextMessagesRef = React.useRef(hasNextMessages);
|
|
46860
|
+
var needsVisibleUnreadCheckRef = React.useRef(false);
|
|
46857
46861
|
var historyLoadArmedRef = React.useRef(true);
|
|
46858
46862
|
var latestLoadArmedRef = React.useRef(true);
|
|
46859
46863
|
var pendingNewestCountRef = React.useRef(0);
|
|
@@ -46965,6 +46969,9 @@ function useChatController(_ref5) {
|
|
|
46965
46969
|
visibleMessagesMapRef.current = visibleMessagesMap;
|
|
46966
46970
|
channelRef.current = channel;
|
|
46967
46971
|
connectionStatusRef.current = connectionStatus;
|
|
46972
|
+
unreadScrollToRef.current = unreadScrollTo;
|
|
46973
|
+
tabIsActiveRef.current = tabIsActive;
|
|
46974
|
+
hasNextMessagesRef.current = hasNext;
|
|
46968
46975
|
});
|
|
46969
46976
|
var oldestConfirmedMessage = getFirstConfirmedMessage(messages);
|
|
46970
46977
|
var newestConfirmedMessage = getLastConfirmedMessage(messages);
|
|
@@ -46998,6 +47005,7 @@ function useChatController(_ref5) {
|
|
|
46998
47005
|
});
|
|
46999
47006
|
}, [channel.id, messages]);
|
|
47000
47007
|
var hasNext = hasNextMessages || (newestConfirmedMessage ? hasNextContiguousInMap(channel.id, newestConfirmedMessage) : false) || (newestConfirmedMessageId && (_channel$lastMessage = channel.lastMessage) !== null && _channel$lastMessage !== void 0 && _channel$lastMessage.id ? compareMessageIds(channel.lastMessage.id, newestConfirmedMessageId) > 0 : false) || hiddenPendingTailExists;
|
|
47008
|
+
hasNextMessagesRef.current = hasNext;
|
|
47001
47009
|
var isScrollInteractionActive = React.useCallback(function () {
|
|
47002
47010
|
return Date.now() - lastScrollActivityAtRef.current < SCROLL_IDLE_MS;
|
|
47003
47011
|
}, []);
|
|
@@ -47102,21 +47110,32 @@ function useChatController(_ref5) {
|
|
|
47102
47110
|
}, lockDuration);
|
|
47103
47111
|
}, [clearJumpScrollingLock]);
|
|
47104
47112
|
var queueVisibleUnreadCheck = React.useCallback(function () {
|
|
47105
|
-
if (pendingVisibleUnreadFrameRef.current !== null
|
|
47113
|
+
if (pendingVisibleUnreadFrameRef.current !== null) {
|
|
47114
|
+
return;
|
|
47115
|
+
}
|
|
47116
|
+
if (unreadScrollToRef.current || !tabIsActiveRef.current || connectionStatusRef.current !== CONNECTION_STATUS.CONNECTED) {
|
|
47117
|
+
needsVisibleUnreadCheckRef.current = true;
|
|
47106
47118
|
return;
|
|
47107
47119
|
}
|
|
47120
|
+
var scheduledChannelId = channel.id;
|
|
47108
47121
|
pendingVisibleUnreadFrameRef.current = requestAnimationFrame(function () {
|
|
47109
47122
|
pendingVisibleUnreadFrameRef.current = null;
|
|
47123
|
+
var currentChannel = channelRef.current;
|
|
47124
|
+
if (currentChannel.id !== scheduledChannelId || unreadScrollToRef.current || !tabIsActiveRef.current || connectionStatusRef.current !== CONNECTION_STATUS.CONNECTED) {
|
|
47125
|
+
needsVisibleUnreadCheckRef.current = true;
|
|
47126
|
+
return;
|
|
47127
|
+
}
|
|
47110
47128
|
var container = scrollRef.current;
|
|
47111
47129
|
if (!container) {
|
|
47112
47130
|
return;
|
|
47113
47131
|
}
|
|
47114
|
-
var
|
|
47132
|
+
var currentMessages = messagesRef.current;
|
|
47133
|
+
var unreadStartIndex = getUnreadTrackingStartIndex(currentMessages);
|
|
47115
47134
|
if (unreadStartIndex < 0) {
|
|
47116
47135
|
return;
|
|
47117
47136
|
}
|
|
47118
|
-
var candidateUnreadMessages =
|
|
47119
|
-
var pinnedToLatestWithoutMorePages = !
|
|
47137
|
+
var candidateUnreadMessages = currentMessages.slice(unreadStartIndex);
|
|
47138
|
+
var pinnedToLatestWithoutMorePages = !hasNextMessagesRef.current && isPinnedToLatest(container);
|
|
47120
47139
|
var containerRect = pinnedToLatestWithoutMorePages ? null : container.getBoundingClientRect();
|
|
47121
47140
|
var visibleUnreadMessages = candidateUnreadMessages.map(function (message) {
|
|
47122
47141
|
if (visibleUnreadReportedRef.current.has(message.id)) {
|
|
@@ -47137,16 +47156,17 @@ function useChatController(_ref5) {
|
|
|
47137
47156
|
var ids = visibleUnreadMessages.filter(isUnreadIncomingMessage).map(function (message) {
|
|
47138
47157
|
return message.id;
|
|
47139
47158
|
});
|
|
47140
|
-
if (!ids.length || !
|
|
47159
|
+
if (!ids.length || !currentChannel.id || !currentChannel.newMessageCount) {
|
|
47141
47160
|
return;
|
|
47142
47161
|
}
|
|
47143
47162
|
ids.forEach(function (id) {
|
|
47144
47163
|
visibleUnreadReportedRef.current.add(id);
|
|
47145
47164
|
});
|
|
47165
|
+
needsVisibleUnreadCheckRef.current = false;
|
|
47146
47166
|
registerLocallyReadUnreadMessages(ids.length);
|
|
47147
|
-
dispatch(markMessagesAsReadAC(
|
|
47167
|
+
dispatch(markMessagesAsReadAC(currentChannel.id, ids));
|
|
47148
47168
|
});
|
|
47149
|
-
}, [channel.id,
|
|
47169
|
+
}, [channel.id, dispatch, registerLocallyReadUnreadMessages]);
|
|
47150
47170
|
var timelineItems = React.useMemo(function () {
|
|
47151
47171
|
var unreadStartIndex = getUnreadDividerIndex(messages, unreadMessageId);
|
|
47152
47172
|
return messages.flatMap(function (message, index) {
|
|
@@ -48574,8 +48594,15 @@ function useChatController(_ref5) {
|
|
|
48574
48594
|
if (!previousUnreadScrollTo || unreadScrollTo) {
|
|
48575
48595
|
return;
|
|
48576
48596
|
}
|
|
48597
|
+
needsVisibleUnreadCheckRef.current = true;
|
|
48577
48598
|
queueVisibleUnreadCheck();
|
|
48578
48599
|
}, [queueVisibleUnreadCheck, unreadScrollTo]);
|
|
48600
|
+
React.useEffect(function () {
|
|
48601
|
+
if (!needsVisibleUnreadCheckRef.current || unreadScrollTo || !tabIsActive || connectionStatus !== CONNECTION_STATUS.CONNECTED) {
|
|
48602
|
+
return;
|
|
48603
|
+
}
|
|
48604
|
+
queueVisibleUnreadCheck();
|
|
48605
|
+
}, [connectionStatus, queueVisibleUnreadCheck, tabIsActive, unreadScrollTo]);
|
|
48579
48606
|
React.useEffect(function () {
|
|
48580
48607
|
return function () {
|
|
48581
48608
|
var _pendingWindowLoadRef3, _pendingEdgeLoadRefs$5, _pendingEdgeLoadRefs$6;
|
|
@@ -48851,6 +48878,33 @@ var createMessageMarkerBatcher = function createMessageMarkerBatcher(_ref) {
|
|
|
48851
48878
|
};
|
|
48852
48879
|
};
|
|
48853
48880
|
|
|
48881
|
+
var hasSendableTextOrPoll = function hasSendableTextOrPoll(messageText, isPoll) {
|
|
48882
|
+
return Boolean(messageText.trim() || isPoll);
|
|
48883
|
+
};
|
|
48884
|
+
var DEFAULT_MEDIA_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'mp4', 'mov', 'avi', 'wmv', 'flv', 'webm', 'jfif'];
|
|
48885
|
+
var DEFAULT_MEDIA_MIME_TYPES = new Set(['image/jpeg', 'image/png', 'image/gif', 'image/jfif', 'image/pjpeg', 'video/mp4', 'video/quicktime', 'video/x-msvideo', 'video/avi', 'video/x-ms-wmv', 'video/x-flv', 'video/webm']);
|
|
48886
|
+
var isDefaultSupportedMediaMimeType = function isDefaultSupportedMediaMimeType(mimeType) {
|
|
48887
|
+
return DEFAULT_MEDIA_MIME_TYPES.has(mimeType.toLowerCase());
|
|
48888
|
+
};
|
|
48889
|
+
var getMediaAttachmentValidationError = function getMediaAttachmentValidationError(file, _ref) {
|
|
48890
|
+
var _file$name$split$pop;
|
|
48891
|
+
var allowedExtensions = _ref.allowedExtensions,
|
|
48892
|
+
sizeLimitKb = _ref.sizeLimitKb,
|
|
48893
|
+
invalidTypeMessage = _ref.invalidTypeMessage,
|
|
48894
|
+
sizeLimitMessage = _ref.sizeLimitMessage;
|
|
48895
|
+
if (sizeLimitKb && file.size / 1024 > sizeLimitKb) {
|
|
48896
|
+
return sizeLimitMessage != null ? sizeLimitMessage : "File size exceeds the limit of " + sizeLimitKb + " KB.";
|
|
48897
|
+
}
|
|
48898
|
+
var supportedExtensions = (allowedExtensions !== null && allowedExtensions !== void 0 && allowedExtensions.length ? allowedExtensions : DEFAULT_MEDIA_EXTENSIONS).map(function (extension) {
|
|
48899
|
+
return extension.replace(/^\./, '').toLowerCase();
|
|
48900
|
+
});
|
|
48901
|
+
var extension = (_file$name$split$pop = file.name.split('.').pop()) === null || _file$name$split$pop === void 0 ? void 0 : _file$name$split$pop.toLowerCase();
|
|
48902
|
+
if (!extension || !supportedExtensions.includes(extension)) {
|
|
48903
|
+
return invalidTypeMessage != null ? invalidTypeMessage : "Invalid file type. Allowed extensions are: " + supportedExtensions.join(', ') + ".";
|
|
48904
|
+
}
|
|
48905
|
+
return null;
|
|
48906
|
+
};
|
|
48907
|
+
|
|
48854
48908
|
var _templateObject$P, _templateObject2$K, _templateObject3$C, _templateObject4$x, _templateObject5$s, _templateObject6$o, _templateObject7$m, _templateObject8$k, _templateObject9$i, _templateObject0$h, _templateObject1$e, _templateObject10$b, _templateObject11$8;
|
|
48855
48909
|
var MessageList = function MessageList(_ref) {
|
|
48856
48910
|
var _scrollRef$current, _scrollRef$current$of, _scrollRef$current2;
|
|
@@ -49237,8 +49291,7 @@ var MessageList = function MessageList(_ref) {
|
|
|
49237
49291
|
} else {
|
|
49238
49292
|
var fileList = Array.from(e.dataTransfer.items);
|
|
49239
49293
|
var hasMedia = fileList.some(function (item) {
|
|
49240
|
-
|
|
49241
|
-
return fileType === 'image' || fileType === 'video';
|
|
49294
|
+
return isDefaultSupportedMediaMimeType(item.type);
|
|
49242
49295
|
});
|
|
49243
49296
|
filesType = hasMedia ? 'media' : 'file';
|
|
49244
49297
|
}
|
|
@@ -53198,10 +53251,6 @@ var SettingItem = styled__default.div(_templateObject9$j || (_templateObject9$j
|
|
|
53198
53251
|
return props.color;
|
|
53199
53252
|
});
|
|
53200
53253
|
|
|
53201
|
-
var hasSendableTextOrPoll = function hasSendableTextOrPoll(messageText, isPoll) {
|
|
53202
|
-
return Boolean(messageText.trim() || isPoll);
|
|
53203
|
-
};
|
|
53204
|
-
|
|
53205
53254
|
var _templateObject$W, _templateObject2$R, _templateObject3$I, _templateObject4$C, _templateObject5$x, _templateObject6$t, _templateObject7$q, _templateObject8$n, _templateObject9$k, _templateObject0$i, _templateObject1$f, _templateObject10$c, _templateObject11$9, _templateObject12$7, _templateObject13$6, _templateObject14$5, _templateObject15$3, _templateObject16$2, _templateObject17$2, _templateObject18$2, _templateObject19$2, _templateObject20$2, _templateObject21$2, _templateObject22$1, _templateObject23$1, _templateObject24$1, _templateObject25$1, _templateObject26$1, _templateObject27$1, _templateObject28$1, _templateObject29$1, _templateObject30$1, _templateObject31$1, _templateObject32$1, _templateObject33$1, _templateObject34$1, _templateObject35$1, _templateObject36$1, _templateObject37$1, _templateObject38$1, _templateObject39$1, _templateObject40$1, _templateObject41$1, _templateObject42, _templateObject43, _templateObject44, _templateObject45, _templateObject46;
|
|
53206
53255
|
function AutoFocusPlugin(_ref) {
|
|
53207
53256
|
var messageForReply = _ref.messageForReply;
|
|
@@ -54073,6 +54122,14 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54073
54122
|
setUploadErrorMessage('');
|
|
54074
54123
|
}, 3000);
|
|
54075
54124
|
};
|
|
54125
|
+
var validateMediaAttachment = function validateMediaAttachment(file) {
|
|
54126
|
+
return getMediaAttachmentValidationError(file, {
|
|
54127
|
+
allowedExtensions: allowedMediaExtensions,
|
|
54128
|
+
sizeLimitKb: mediaAttachmentSizeLimit,
|
|
54129
|
+
invalidTypeMessage: allowedMediaExtensionsErrorMessage,
|
|
54130
|
+
sizeLimitMessage: attachmentSizeLimitErrorMessage
|
|
54131
|
+
});
|
|
54132
|
+
};
|
|
54076
54133
|
var handleFileUpload = function handleFileUpload(e) {
|
|
54077
54134
|
var isMediaAttachment = e.target.accept === mediaExtensions;
|
|
54078
54135
|
var fileList = Object.values(e.target.files);
|
|
@@ -54089,27 +54146,12 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54089
54146
|
}
|
|
54090
54147
|
filesToProcess.forEach(function (file) {
|
|
54091
54148
|
try {
|
|
54092
|
-
var
|
|
54093
|
-
var errorMessage = '';
|
|
54094
|
-
if (isMediaAttachment) {
|
|
54095
|
-
if (mediaAttachmentSizeLimit && file.size / 1024 > mediaAttachmentSizeLimit) {
|
|
54096
|
-
allowUpload = false;
|
|
54097
|
-
errorMessage = attachmentSizeLimitErrorMessage != null ? attachmentSizeLimitErrorMessage : "File size exceeds the limit of " + mediaAttachmentSizeLimit + " KB.";
|
|
54098
|
-
}
|
|
54099
|
-
if (allowedMediaExtensions !== null && allowedMediaExtensions !== void 0 && allowedMediaExtensions.length) {
|
|
54100
|
-
var fileName = file.name;
|
|
54101
|
-
var fileExtension = fileName.split('.').pop().toLowerCase();
|
|
54102
|
-
if (!allowedMediaExtensions.includes(fileExtension)) {
|
|
54103
|
-
allowUpload = false;
|
|
54104
|
-
errorMessage = allowedMediaExtensionsErrorMessage != null ? allowedMediaExtensionsErrorMessage : "Invalid file type. Allowed extensions are: " + allowedMediaExtensions.join(', ') + ".";
|
|
54105
|
-
}
|
|
54106
|
-
}
|
|
54107
|
-
}
|
|
54149
|
+
var validationError = isMediaAttachment ? validateMediaAttachment(file) : null;
|
|
54108
54150
|
var _temp8 = function () {
|
|
54109
|
-
if (
|
|
54151
|
+
if (!validationError) {
|
|
54110
54152
|
return Promise.resolve(handleAddAttachmentWithViewOnceCheck(file, isMediaAttachment)).then(function () {});
|
|
54111
54153
|
} else {
|
|
54112
|
-
showFileUploadError(
|
|
54154
|
+
showFileUploadError(validationError);
|
|
54113
54155
|
}
|
|
54114
54156
|
}();
|
|
54115
54157
|
return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(function () {}) : void 0);
|
|
@@ -54149,25 +54191,12 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54149
54191
|
}
|
|
54150
54192
|
filesToProcess.forEach(function (file) {
|
|
54151
54193
|
try {
|
|
54152
|
-
var
|
|
54153
|
-
var errorMessage = '';
|
|
54154
|
-
if (mediaAttachmentSizeLimit && file.size / 1024 > mediaAttachmentSizeLimit) {
|
|
54155
|
-
allowUpload = false;
|
|
54156
|
-
errorMessage = attachmentSizeLimitErrorMessage != null ? attachmentSizeLimitErrorMessage : "File size exceeds the limit of " + mediaAttachmentSizeLimit + " KB.";
|
|
54157
|
-
}
|
|
54158
|
-
if (allowedMediaExtensions !== null && allowedMediaExtensions !== void 0 && allowedMediaExtensions.length) {
|
|
54159
|
-
var fileName = file.name;
|
|
54160
|
-
var fileExtension = fileName.split('.').pop().toLowerCase();
|
|
54161
|
-
if (!allowedMediaExtensions.includes(fileExtension)) {
|
|
54162
|
-
allowUpload = false;
|
|
54163
|
-
errorMessage = allowedMediaExtensionsErrorMessage != null ? allowedMediaExtensionsErrorMessage : "Invalid file type. Allowed extensions are: " + allowedMediaExtensions.join(', ') + ".";
|
|
54164
|
-
}
|
|
54165
|
-
}
|
|
54194
|
+
var validationError = validateMediaAttachment(file);
|
|
54166
54195
|
var _temp9 = function () {
|
|
54167
|
-
if (
|
|
54196
|
+
if (!validationError) {
|
|
54168
54197
|
return Promise.resolve(handleAddAttachmentWithViewOnceCheck(file, true)).then(function () {});
|
|
54169
54198
|
} else {
|
|
54170
|
-
showFileUploadError(
|
|
54199
|
+
showFileUploadError(validationError);
|
|
54171
54200
|
}
|
|
54172
54201
|
}();
|
|
54173
54202
|
return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function () {}) : void 0);
|
|
@@ -54503,27 +54532,12 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54503
54532
|
var isMediaAttachment = draggedAttachments[0].attachmentType === 'media';
|
|
54504
54533
|
filesToProcess.forEach(function (file) {
|
|
54505
54534
|
try {
|
|
54506
|
-
var
|
|
54507
|
-
var errorMessage = '';
|
|
54508
|
-
if (isMediaAttachment) {
|
|
54509
|
-
if (mediaAttachmentSizeLimit && file.size / 1024 > mediaAttachmentSizeLimit) {
|
|
54510
|
-
allowUpload = false;
|
|
54511
|
-
errorMessage = attachmentSizeLimitErrorMessage != null ? attachmentSizeLimitErrorMessage : "File size exceeds the limit of " + mediaAttachmentSizeLimit + " KB.";
|
|
54512
|
-
}
|
|
54513
|
-
if (allowedMediaExtensions !== null && allowedMediaExtensions !== void 0 && allowedMediaExtensions.length) {
|
|
54514
|
-
var fileName = file.name;
|
|
54515
|
-
var fileExtension = fileName.split('.').pop().toLowerCase();
|
|
54516
|
-
if (!allowedMediaExtensions.includes(fileExtension)) {
|
|
54517
|
-
allowUpload = false;
|
|
54518
|
-
errorMessage = allowedMediaExtensionsErrorMessage != null ? allowedMediaExtensionsErrorMessage : "Invalid file type. Allowed extensions are: " + allowedMediaExtensions.join(', ') + ".";
|
|
54519
|
-
}
|
|
54520
|
-
}
|
|
54521
|
-
}
|
|
54535
|
+
var validationError = isMediaAttachment ? validateMediaAttachment(file) : null;
|
|
54522
54536
|
var _temp19 = function () {
|
|
54523
|
-
if (
|
|
54537
|
+
if (!validationError) {
|
|
54524
54538
|
return Promise.resolve(handleAddAttachmentWithViewOnceCheck(file, isMediaAttachment)).then(function () {});
|
|
54525
54539
|
} else {
|
|
54526
|
-
showFileUploadError(
|
|
54540
|
+
showFileUploadError(validationError);
|
|
54527
54541
|
}
|
|
54528
54542
|
}();
|
|
54529
54543
|
return Promise.resolve(_temp19 && _temp19.then ? _temp19.then(function () {}) : void 0);
|
package/index.modern.js
CHANGED
|
@@ -46834,6 +46834,10 @@ function useChatController(_ref5) {
|
|
|
46834
46834
|
var highlightTimeoutRef = useRef(null);
|
|
46835
46835
|
var unreadRestoreCompletedRef = useRef(false);
|
|
46836
46836
|
var previousUnreadScrollToRef = useRef(unreadScrollTo);
|
|
46837
|
+
var unreadScrollToRef = useRef(unreadScrollTo);
|
|
46838
|
+
var tabIsActiveRef = useRef(tabIsActive);
|
|
46839
|
+
var hasNextMessagesRef = useRef(hasNextMessages);
|
|
46840
|
+
var needsVisibleUnreadCheckRef = useRef(false);
|
|
46837
46841
|
var historyLoadArmedRef = useRef(true);
|
|
46838
46842
|
var latestLoadArmedRef = useRef(true);
|
|
46839
46843
|
var pendingNewestCountRef = useRef(0);
|
|
@@ -46945,6 +46949,9 @@ function useChatController(_ref5) {
|
|
|
46945
46949
|
visibleMessagesMapRef.current = visibleMessagesMap;
|
|
46946
46950
|
channelRef.current = channel;
|
|
46947
46951
|
connectionStatusRef.current = connectionStatus;
|
|
46952
|
+
unreadScrollToRef.current = unreadScrollTo;
|
|
46953
|
+
tabIsActiveRef.current = tabIsActive;
|
|
46954
|
+
hasNextMessagesRef.current = hasNext;
|
|
46948
46955
|
});
|
|
46949
46956
|
var oldestConfirmedMessage = getFirstConfirmedMessage(messages);
|
|
46950
46957
|
var newestConfirmedMessage = getLastConfirmedMessage(messages);
|
|
@@ -46978,6 +46985,7 @@ function useChatController(_ref5) {
|
|
|
46978
46985
|
});
|
|
46979
46986
|
}, [channel.id, messages]);
|
|
46980
46987
|
var hasNext = hasNextMessages || (newestConfirmedMessage ? hasNextContiguousInMap(channel.id, newestConfirmedMessage) : false) || (newestConfirmedMessageId && (_channel$lastMessage = channel.lastMessage) !== null && _channel$lastMessage !== void 0 && _channel$lastMessage.id ? compareMessageIds(channel.lastMessage.id, newestConfirmedMessageId) > 0 : false) || hiddenPendingTailExists;
|
|
46988
|
+
hasNextMessagesRef.current = hasNext;
|
|
46981
46989
|
var isScrollInteractionActive = useCallback(function () {
|
|
46982
46990
|
return Date.now() - lastScrollActivityAtRef.current < SCROLL_IDLE_MS;
|
|
46983
46991
|
}, []);
|
|
@@ -47082,21 +47090,32 @@ function useChatController(_ref5) {
|
|
|
47082
47090
|
}, lockDuration);
|
|
47083
47091
|
}, [clearJumpScrollingLock]);
|
|
47084
47092
|
var queueVisibleUnreadCheck = useCallback(function () {
|
|
47085
|
-
if (pendingVisibleUnreadFrameRef.current !== null
|
|
47093
|
+
if (pendingVisibleUnreadFrameRef.current !== null) {
|
|
47094
|
+
return;
|
|
47095
|
+
}
|
|
47096
|
+
if (unreadScrollToRef.current || !tabIsActiveRef.current || connectionStatusRef.current !== CONNECTION_STATUS.CONNECTED) {
|
|
47097
|
+
needsVisibleUnreadCheckRef.current = true;
|
|
47086
47098
|
return;
|
|
47087
47099
|
}
|
|
47100
|
+
var scheduledChannelId = channel.id;
|
|
47088
47101
|
pendingVisibleUnreadFrameRef.current = requestAnimationFrame(function () {
|
|
47089
47102
|
pendingVisibleUnreadFrameRef.current = null;
|
|
47103
|
+
var currentChannel = channelRef.current;
|
|
47104
|
+
if (currentChannel.id !== scheduledChannelId || unreadScrollToRef.current || !tabIsActiveRef.current || connectionStatusRef.current !== CONNECTION_STATUS.CONNECTED) {
|
|
47105
|
+
needsVisibleUnreadCheckRef.current = true;
|
|
47106
|
+
return;
|
|
47107
|
+
}
|
|
47090
47108
|
var container = scrollRef.current;
|
|
47091
47109
|
if (!container) {
|
|
47092
47110
|
return;
|
|
47093
47111
|
}
|
|
47094
|
-
var
|
|
47112
|
+
var currentMessages = messagesRef.current;
|
|
47113
|
+
var unreadStartIndex = getUnreadTrackingStartIndex(currentMessages);
|
|
47095
47114
|
if (unreadStartIndex < 0) {
|
|
47096
47115
|
return;
|
|
47097
47116
|
}
|
|
47098
|
-
var candidateUnreadMessages =
|
|
47099
|
-
var pinnedToLatestWithoutMorePages = !
|
|
47117
|
+
var candidateUnreadMessages = currentMessages.slice(unreadStartIndex);
|
|
47118
|
+
var pinnedToLatestWithoutMorePages = !hasNextMessagesRef.current && isPinnedToLatest(container);
|
|
47100
47119
|
var containerRect = pinnedToLatestWithoutMorePages ? null : container.getBoundingClientRect();
|
|
47101
47120
|
var visibleUnreadMessages = candidateUnreadMessages.map(function (message) {
|
|
47102
47121
|
if (visibleUnreadReportedRef.current.has(message.id)) {
|
|
@@ -47117,16 +47136,17 @@ function useChatController(_ref5) {
|
|
|
47117
47136
|
var ids = visibleUnreadMessages.filter(isUnreadIncomingMessage).map(function (message) {
|
|
47118
47137
|
return message.id;
|
|
47119
47138
|
});
|
|
47120
|
-
if (!ids.length || !
|
|
47139
|
+
if (!ids.length || !currentChannel.id || !currentChannel.newMessageCount) {
|
|
47121
47140
|
return;
|
|
47122
47141
|
}
|
|
47123
47142
|
ids.forEach(function (id) {
|
|
47124
47143
|
visibleUnreadReportedRef.current.add(id);
|
|
47125
47144
|
});
|
|
47145
|
+
needsVisibleUnreadCheckRef.current = false;
|
|
47126
47146
|
registerLocallyReadUnreadMessages(ids.length);
|
|
47127
|
-
dispatch(markMessagesAsReadAC(
|
|
47147
|
+
dispatch(markMessagesAsReadAC(currentChannel.id, ids));
|
|
47128
47148
|
});
|
|
47129
|
-
}, [channel.id,
|
|
47149
|
+
}, [channel.id, dispatch, registerLocallyReadUnreadMessages]);
|
|
47130
47150
|
var timelineItems = useMemo(function () {
|
|
47131
47151
|
var unreadStartIndex = getUnreadDividerIndex(messages, unreadMessageId);
|
|
47132
47152
|
return messages.flatMap(function (message, index) {
|
|
@@ -48554,8 +48574,15 @@ function useChatController(_ref5) {
|
|
|
48554
48574
|
if (!previousUnreadScrollTo || unreadScrollTo) {
|
|
48555
48575
|
return;
|
|
48556
48576
|
}
|
|
48577
|
+
needsVisibleUnreadCheckRef.current = true;
|
|
48557
48578
|
queueVisibleUnreadCheck();
|
|
48558
48579
|
}, [queueVisibleUnreadCheck, unreadScrollTo]);
|
|
48580
|
+
useEffect(function () {
|
|
48581
|
+
if (!needsVisibleUnreadCheckRef.current || unreadScrollTo || !tabIsActive || connectionStatus !== CONNECTION_STATUS.CONNECTED) {
|
|
48582
|
+
return;
|
|
48583
|
+
}
|
|
48584
|
+
queueVisibleUnreadCheck();
|
|
48585
|
+
}, [connectionStatus, queueVisibleUnreadCheck, tabIsActive, unreadScrollTo]);
|
|
48559
48586
|
useEffect(function () {
|
|
48560
48587
|
return function () {
|
|
48561
48588
|
var _pendingWindowLoadRef3, _pendingEdgeLoadRefs$5, _pendingEdgeLoadRefs$6;
|
|
@@ -48831,6 +48858,33 @@ var createMessageMarkerBatcher = function createMessageMarkerBatcher(_ref) {
|
|
|
48831
48858
|
};
|
|
48832
48859
|
};
|
|
48833
48860
|
|
|
48861
|
+
var hasSendableTextOrPoll = function hasSendableTextOrPoll(messageText, isPoll) {
|
|
48862
|
+
return Boolean(messageText.trim() || isPoll);
|
|
48863
|
+
};
|
|
48864
|
+
var DEFAULT_MEDIA_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'mp4', 'mov', 'avi', 'wmv', 'flv', 'webm', 'jfif'];
|
|
48865
|
+
var DEFAULT_MEDIA_MIME_TYPES = new Set(['image/jpeg', 'image/png', 'image/gif', 'image/jfif', 'image/pjpeg', 'video/mp4', 'video/quicktime', 'video/x-msvideo', 'video/avi', 'video/x-ms-wmv', 'video/x-flv', 'video/webm']);
|
|
48866
|
+
var isDefaultSupportedMediaMimeType = function isDefaultSupportedMediaMimeType(mimeType) {
|
|
48867
|
+
return DEFAULT_MEDIA_MIME_TYPES.has(mimeType.toLowerCase());
|
|
48868
|
+
};
|
|
48869
|
+
var getMediaAttachmentValidationError = function getMediaAttachmentValidationError(file, _ref) {
|
|
48870
|
+
var _file$name$split$pop;
|
|
48871
|
+
var allowedExtensions = _ref.allowedExtensions,
|
|
48872
|
+
sizeLimitKb = _ref.sizeLimitKb,
|
|
48873
|
+
invalidTypeMessage = _ref.invalidTypeMessage,
|
|
48874
|
+
sizeLimitMessage = _ref.sizeLimitMessage;
|
|
48875
|
+
if (sizeLimitKb && file.size / 1024 > sizeLimitKb) {
|
|
48876
|
+
return sizeLimitMessage != null ? sizeLimitMessage : "File size exceeds the limit of " + sizeLimitKb + " KB.";
|
|
48877
|
+
}
|
|
48878
|
+
var supportedExtensions = (allowedExtensions !== null && allowedExtensions !== void 0 && allowedExtensions.length ? allowedExtensions : DEFAULT_MEDIA_EXTENSIONS).map(function (extension) {
|
|
48879
|
+
return extension.replace(/^\./, '').toLowerCase();
|
|
48880
|
+
});
|
|
48881
|
+
var extension = (_file$name$split$pop = file.name.split('.').pop()) === null || _file$name$split$pop === void 0 ? void 0 : _file$name$split$pop.toLowerCase();
|
|
48882
|
+
if (!extension || !supportedExtensions.includes(extension)) {
|
|
48883
|
+
return invalidTypeMessage != null ? invalidTypeMessage : "Invalid file type. Allowed extensions are: " + supportedExtensions.join(', ') + ".";
|
|
48884
|
+
}
|
|
48885
|
+
return null;
|
|
48886
|
+
};
|
|
48887
|
+
|
|
48834
48888
|
var _templateObject$P, _templateObject2$K, _templateObject3$C, _templateObject4$x, _templateObject5$s, _templateObject6$o, _templateObject7$m, _templateObject8$k, _templateObject9$i, _templateObject0$h, _templateObject1$e, _templateObject10$b, _templateObject11$8;
|
|
48835
48889
|
var MessageList = function MessageList(_ref) {
|
|
48836
48890
|
var _scrollRef$current, _scrollRef$current$of, _scrollRef$current2;
|
|
@@ -49217,8 +49271,7 @@ var MessageList = function MessageList(_ref) {
|
|
|
49217
49271
|
} else {
|
|
49218
49272
|
var fileList = Array.from(e.dataTransfer.items);
|
|
49219
49273
|
var hasMedia = fileList.some(function (item) {
|
|
49220
|
-
|
|
49221
|
-
return fileType === 'image' || fileType === 'video';
|
|
49274
|
+
return isDefaultSupportedMediaMimeType(item.type);
|
|
49222
49275
|
});
|
|
49223
49276
|
filesType = hasMedia ? 'media' : 'file';
|
|
49224
49277
|
}
|
|
@@ -53178,10 +53231,6 @@ var SettingItem = styled.div(_templateObject9$j || (_templateObject9$j = _tagged
|
|
|
53178
53231
|
return props.color;
|
|
53179
53232
|
});
|
|
53180
53233
|
|
|
53181
|
-
var hasSendableTextOrPoll = function hasSendableTextOrPoll(messageText, isPoll) {
|
|
53182
|
-
return Boolean(messageText.trim() || isPoll);
|
|
53183
|
-
};
|
|
53184
|
-
|
|
53185
53234
|
var _templateObject$W, _templateObject2$R, _templateObject3$I, _templateObject4$C, _templateObject5$x, _templateObject6$t, _templateObject7$q, _templateObject8$n, _templateObject9$k, _templateObject0$i, _templateObject1$f, _templateObject10$c, _templateObject11$9, _templateObject12$7, _templateObject13$6, _templateObject14$5, _templateObject15$3, _templateObject16$2, _templateObject17$2, _templateObject18$2, _templateObject19$2, _templateObject20$2, _templateObject21$2, _templateObject22$1, _templateObject23$1, _templateObject24$1, _templateObject25$1, _templateObject26$1, _templateObject27$1, _templateObject28$1, _templateObject29$1, _templateObject30$1, _templateObject31$1, _templateObject32$1, _templateObject33$1, _templateObject34$1, _templateObject35$1, _templateObject36$1, _templateObject37$1, _templateObject38$1, _templateObject39$1, _templateObject40$1, _templateObject41$1, _templateObject42, _templateObject43, _templateObject44, _templateObject45, _templateObject46;
|
|
53186
53235
|
function AutoFocusPlugin(_ref) {
|
|
53187
53236
|
var messageForReply = _ref.messageForReply;
|
|
@@ -54053,6 +54102,14 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54053
54102
|
setUploadErrorMessage('');
|
|
54054
54103
|
}, 3000);
|
|
54055
54104
|
};
|
|
54105
|
+
var validateMediaAttachment = function validateMediaAttachment(file) {
|
|
54106
|
+
return getMediaAttachmentValidationError(file, {
|
|
54107
|
+
allowedExtensions: allowedMediaExtensions,
|
|
54108
|
+
sizeLimitKb: mediaAttachmentSizeLimit,
|
|
54109
|
+
invalidTypeMessage: allowedMediaExtensionsErrorMessage,
|
|
54110
|
+
sizeLimitMessage: attachmentSizeLimitErrorMessage
|
|
54111
|
+
});
|
|
54112
|
+
};
|
|
54056
54113
|
var handleFileUpload = function handleFileUpload(e) {
|
|
54057
54114
|
var isMediaAttachment = e.target.accept === mediaExtensions;
|
|
54058
54115
|
var fileList = Object.values(e.target.files);
|
|
@@ -54069,27 +54126,12 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54069
54126
|
}
|
|
54070
54127
|
filesToProcess.forEach(function (file) {
|
|
54071
54128
|
try {
|
|
54072
|
-
var
|
|
54073
|
-
var errorMessage = '';
|
|
54074
|
-
if (isMediaAttachment) {
|
|
54075
|
-
if (mediaAttachmentSizeLimit && file.size / 1024 > mediaAttachmentSizeLimit) {
|
|
54076
|
-
allowUpload = false;
|
|
54077
|
-
errorMessage = attachmentSizeLimitErrorMessage != null ? attachmentSizeLimitErrorMessage : "File size exceeds the limit of " + mediaAttachmentSizeLimit + " KB.";
|
|
54078
|
-
}
|
|
54079
|
-
if (allowedMediaExtensions !== null && allowedMediaExtensions !== void 0 && allowedMediaExtensions.length) {
|
|
54080
|
-
var fileName = file.name;
|
|
54081
|
-
var fileExtension = fileName.split('.').pop().toLowerCase();
|
|
54082
|
-
if (!allowedMediaExtensions.includes(fileExtension)) {
|
|
54083
|
-
allowUpload = false;
|
|
54084
|
-
errorMessage = allowedMediaExtensionsErrorMessage != null ? allowedMediaExtensionsErrorMessage : "Invalid file type. Allowed extensions are: " + allowedMediaExtensions.join(', ') + ".";
|
|
54085
|
-
}
|
|
54086
|
-
}
|
|
54087
|
-
}
|
|
54129
|
+
var validationError = isMediaAttachment ? validateMediaAttachment(file) : null;
|
|
54088
54130
|
var _temp8 = function () {
|
|
54089
|
-
if (
|
|
54131
|
+
if (!validationError) {
|
|
54090
54132
|
return Promise.resolve(handleAddAttachmentWithViewOnceCheck(file, isMediaAttachment)).then(function () {});
|
|
54091
54133
|
} else {
|
|
54092
|
-
showFileUploadError(
|
|
54134
|
+
showFileUploadError(validationError);
|
|
54093
54135
|
}
|
|
54094
54136
|
}();
|
|
54095
54137
|
return Promise.resolve(_temp8 && _temp8.then ? _temp8.then(function () {}) : void 0);
|
|
@@ -54129,25 +54171,12 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54129
54171
|
}
|
|
54130
54172
|
filesToProcess.forEach(function (file) {
|
|
54131
54173
|
try {
|
|
54132
|
-
var
|
|
54133
|
-
var errorMessage = '';
|
|
54134
|
-
if (mediaAttachmentSizeLimit && file.size / 1024 > mediaAttachmentSizeLimit) {
|
|
54135
|
-
allowUpload = false;
|
|
54136
|
-
errorMessage = attachmentSizeLimitErrorMessage != null ? attachmentSizeLimitErrorMessage : "File size exceeds the limit of " + mediaAttachmentSizeLimit + " KB.";
|
|
54137
|
-
}
|
|
54138
|
-
if (allowedMediaExtensions !== null && allowedMediaExtensions !== void 0 && allowedMediaExtensions.length) {
|
|
54139
|
-
var fileName = file.name;
|
|
54140
|
-
var fileExtension = fileName.split('.').pop().toLowerCase();
|
|
54141
|
-
if (!allowedMediaExtensions.includes(fileExtension)) {
|
|
54142
|
-
allowUpload = false;
|
|
54143
|
-
errorMessage = allowedMediaExtensionsErrorMessage != null ? allowedMediaExtensionsErrorMessage : "Invalid file type. Allowed extensions are: " + allowedMediaExtensions.join(', ') + ".";
|
|
54144
|
-
}
|
|
54145
|
-
}
|
|
54174
|
+
var validationError = validateMediaAttachment(file);
|
|
54146
54175
|
var _temp9 = function () {
|
|
54147
|
-
if (
|
|
54176
|
+
if (!validationError) {
|
|
54148
54177
|
return Promise.resolve(handleAddAttachmentWithViewOnceCheck(file, true)).then(function () {});
|
|
54149
54178
|
} else {
|
|
54150
|
-
showFileUploadError(
|
|
54179
|
+
showFileUploadError(validationError);
|
|
54151
54180
|
}
|
|
54152
54181
|
}();
|
|
54153
54182
|
return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function () {}) : void 0);
|
|
@@ -54483,27 +54512,12 @@ var SendMessageInput = function SendMessageInput(_ref3) {
|
|
|
54483
54512
|
var isMediaAttachment = draggedAttachments[0].attachmentType === 'media';
|
|
54484
54513
|
filesToProcess.forEach(function (file) {
|
|
54485
54514
|
try {
|
|
54486
|
-
var
|
|
54487
|
-
var errorMessage = '';
|
|
54488
|
-
if (isMediaAttachment) {
|
|
54489
|
-
if (mediaAttachmentSizeLimit && file.size / 1024 > mediaAttachmentSizeLimit) {
|
|
54490
|
-
allowUpload = false;
|
|
54491
|
-
errorMessage = attachmentSizeLimitErrorMessage != null ? attachmentSizeLimitErrorMessage : "File size exceeds the limit of " + mediaAttachmentSizeLimit + " KB.";
|
|
54492
|
-
}
|
|
54493
|
-
if (allowedMediaExtensions !== null && allowedMediaExtensions !== void 0 && allowedMediaExtensions.length) {
|
|
54494
|
-
var fileName = file.name;
|
|
54495
|
-
var fileExtension = fileName.split('.').pop().toLowerCase();
|
|
54496
|
-
if (!allowedMediaExtensions.includes(fileExtension)) {
|
|
54497
|
-
allowUpload = false;
|
|
54498
|
-
errorMessage = allowedMediaExtensionsErrorMessage != null ? allowedMediaExtensionsErrorMessage : "Invalid file type. Allowed extensions are: " + allowedMediaExtensions.join(', ') + ".";
|
|
54499
|
-
}
|
|
54500
|
-
}
|
|
54501
|
-
}
|
|
54515
|
+
var validationError = isMediaAttachment ? validateMediaAttachment(file) : null;
|
|
54502
54516
|
var _temp19 = function () {
|
|
54503
|
-
if (
|
|
54517
|
+
if (!validationError) {
|
|
54504
54518
|
return Promise.resolve(handleAddAttachmentWithViewOnceCheck(file, isMediaAttachment)).then(function () {});
|
|
54505
54519
|
} else {
|
|
54506
|
-
showFileUploadError(
|
|
54520
|
+
showFileUploadError(validationError);
|
|
54507
54521
|
}
|
|
54508
54522
|
}();
|
|
54509
54523
|
return Promise.resolve(_temp19 && _temp19.then ? _temp19.then(function () {}) : void 0);
|