From fc5cc864700a439fde07cd894c4946b1c3e948db Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Wed, 1 Oct 2025 11:53:35 +0900
Subject: [PATCH 1/9] fixed a bug where Failed message can't be send
---
apps/testing/src/pages/PlaygroundPage.tsx | 8 ++-
package.json | 6 +--
.../context/hooks/useHandleChannelEvents.ts | 13 ++---
.../components/MessageList/index.tsx | 2 +-
.../ThreadList/ThreadListItemContent.tsx | 1 +
.../Thread/context/hooks/useThreadFetchers.ts | 1 +
src/modules/Thread/context/useThread.ts | 52 ++++++++++++++-----
src/utils/storeManager.ts | 7 +++
yarn.lock | 33 ++++++------
9 files changed, 83 insertions(+), 40 deletions(-)
diff --git a/apps/testing/src/pages/PlaygroundPage.tsx b/apps/testing/src/pages/PlaygroundPage.tsx
index 3ea64d6fa..13b7c1e31 100644
--- a/apps/testing/src/pages/PlaygroundPage.tsx
+++ b/apps/testing/src/pages/PlaygroundPage.tsx
@@ -4,5 +4,11 @@ import { defaultProps } from '../libs/const.ts';
export function PlaygroundPage() {
const props = useConfigParams(defaultProps);
- return ;
+ return ;
}
diff --git a/package.json b/package.json
index 27ef0095d..2c3a0348d 100644
--- a/package.json
+++ b/package.json
@@ -70,9 +70,9 @@
"react-dom": "^16.8.6 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"dependencies": {
- "@sendbird/chat": "^4.18.0",
- "@sendbird/react-uikit-message-template-view": "^0.0.10",
- "@sendbird/uikit-tools": "^0.0.10",
+ "@sendbird/chat": "^4.20.0",
+ "@sendbird/react-uikit-message-template-view": "^0.0.17",
+ "@sendbird/uikit-tools": "^0.0.17",
"css-vars-ponyfill": "^2.3.2",
"date-fns": "^2.16.1",
"dompurify": "^3.2.4"
diff --git a/src/modules/Channel/context/hooks/useHandleChannelEvents.ts b/src/modules/Channel/context/hooks/useHandleChannelEvents.ts
index 99df31eca..e316a8571 100644
--- a/src/modules/Channel/context/hooks/useHandleChannelEvents.ts
+++ b/src/modules/Channel/context/hooks/useHandleChannelEvents.ts
@@ -121,7 +121,6 @@ function useHandleChannelEvents({
},
onUserMarkedUnread: (channel, userIds) => {
logger.info('Channel | useHandleChannelEvents: onUserMarkedUnread', channel, userIds);
- // TODO:: MADOKA 이 부분에 대해서 명확하게 확인해야 함.
if (compareIds(channel?.url, channelUrl)) {
messagesDispatcher({
type: messageActions.MARK_AS_UNREAD,
@@ -169,11 +168,13 @@ function useHandleChannelEvents({
});
},
onReactionUpdated: (channel, reactionEvent) => {
- logger.info('Channel | useHandleChannelEvents: onReactionUpdated', { channel, reactionEvent });
- messagesDispatcher({
- type: messageActions.ON_REACTION_UPDATED,
- payload: reactionEvent,
- });
+ if (channel.isGroupChannel() && compareIds(channel?.url, channelUrl)) {
+ logger.info('Channel | useHandleChannelEvents: onReactionUpdated', { channel, reactionEvent });
+ messagesDispatcher({
+ type: messageActions.ON_REACTION_UPDATED,
+ payload: reactionEvent,
+ });
+ }
},
onChannelChanged: (channel) => {
if (channel.isGroupChannel() && compareIds(channel?.url, channelUrl)) {
diff --git a/src/modules/GroupChannel/components/MessageList/index.tsx b/src/modules/GroupChannel/components/MessageList/index.tsx
index a55a13f60..519ceaf7e 100644
--- a/src/modules/GroupChannel/components/MessageList/index.tsx
+++ b/src/modules/GroupChannel/components/MessageList/index.tsx
@@ -110,7 +110,7 @@ export const MessageList = (props: GroupChannelMessageListProps) => {
// Find the first unread message
const firstUnreadMessage = useMemo(() => {
- if (!enableMarkAsUnread || !isInitializedRef.current || messages.length === 0 || readState === 'read') {
+ if (!enableMarkAsUnread || !isInitializedRef.current || messages.length === 0 || readState === 'read' || !currentChannel?.myLastRead) {
return undefined;
}
diff --git a/src/modules/Thread/components/ThreadList/ThreadListItemContent.tsx b/src/modules/Thread/components/ThreadList/ThreadListItemContent.tsx
index 89e6ce61e..947e053b9 100644
--- a/src/modules/Thread/components/ThreadList/ThreadListItemContent.tsx
+++ b/src/modules/Thread/components/ThreadList/ThreadListItemContent.tsx
@@ -332,6 +332,7 @@ export default function ThreadListItemContent(props: ThreadListItemContentProps)
toggleReaction,
isOpenedFromThread: true,
deleteMessage,
+ resendMessage,
onDownloadClick: async (e) => {
if (!onBeforeDownloadFileMessage) return;
diff --git a/src/modules/Thread/context/hooks/useThreadFetchers.ts b/src/modules/Thread/context/hooks/useThreadFetchers.ts
index f34da3a2b..3f1dfce8d 100644
--- a/src/modules/Thread/context/hooks/useThreadFetchers.ts
+++ b/src/modules/Thread/context/hooks/useThreadFetchers.ts
@@ -30,6 +30,7 @@ function getThreadMessageListParams(params?: Partial)
prevResultSize: PREV_THREADS_FETCH_SIZE,
nextResultSize: NEXT_THREADS_FETCH_SIZE,
includeMetaArray: true,
+ isInclusive: true,
...params,
};
}
diff --git a/src/modules/Thread/context/useThread.ts b/src/modules/Thread/context/useThread.ts
index 2ec79319c..301b4dbf8 100644
--- a/src/modules/Thread/context/useThread.ts
+++ b/src/modules/Thread/context/useThread.ts
@@ -56,6 +56,10 @@ const useThread = () => {
const sendMessageStatusActions = {
sendMessageStart: useCallback((message: SendableMessageType) => store.setState(state => {
+ if ('sendingStatus' in message) {
+ (message as any).sendingStatus = 'pending';
+ }
+
return {
...state,
localThreadMessages: [
@@ -66,6 +70,10 @@ const useThread = () => {
}), [store]),
sendMessageSuccess: useCallback((message: SendableMessageType) => store.setState(state => {
+ if ('sendingStatus' in message) {
+ (message as any).sendingStatus = 'succeeded';
+ }
+
return {
...state,
allThreadMessages: [
@@ -81,6 +89,10 @@ const useThread = () => {
}), [store]),
sendMessageFailure: useCallback((message: SendableMessageType) => store.setState(state => {
+ if ('sendingStatus' in message) {
+ (message as any).sendingStatus = 'failed';
+ }
+
return {
...state,
localThreadMessages: state.localThreadMessages.map((m) => (
@@ -92,6 +104,10 @@ const useThread = () => {
}), [store]),
resendMessageStart: useCallback((message: SendableMessageType) => store.setState(state => {
+ if ('sendingStatus' in message) {
+ (message as any).sendingStatus = 'pending';
+ }
+
return {
...state,
localThreadMessages: state.localThreadMessages.map((m) => (
@@ -235,16 +251,20 @@ const useThread = () => {
initializeThreadListSuccess: useCallback((parentMessage: BaseMessage, anchorMessage: SendableMessageType, threadedMessages: BaseMessage[]) => store.setState(state => {
const anchorMessageCreatedAt = (!anchorMessage?.messageId) ? parentMessage?.createdAt : anchorMessage?.createdAt;
- const anchorIndex = threadedMessages.findIndex((message) => message?.createdAt > anchorMessageCreatedAt);
+ const anchorIndex = threadedMessages.findIndex((message) => message?.createdAt === anchorMessageCreatedAt);
const prevThreadMessages = anchorIndex > -1 ? threadedMessages.slice(0, anchorIndex) : threadedMessages;
- const anchorThreadMessage = anchorMessage?.messageId ? [anchorMessage] : [];
const nextThreadMessages = anchorIndex > -1 ? threadedMessages.slice(anchorIndex) : [];
+
+ const allThreadMessages = [].concat(
+ ...prevThreadMessages, ...nextThreadMessages,
+ ) as CoreMessageType[];
+
return {
...state,
threadListState: ThreadListStateTypes.INITIALIZED,
hasMorePrev: anchorIndex === -1 || anchorIndex === PREV_THREADS_FETCH_SIZE,
hasMoreNext: threadedMessages.length - anchorIndex === NEXT_THREADS_FETCH_SIZE,
- allThreadMessages: [prevThreadMessages, anchorThreadMessage, nextThreadMessages].flat() as CoreMessageType[],
+ allThreadMessages,
};
}), [store]),
@@ -397,18 +417,26 @@ const useThread = () => {
}), [store]),
onReactionUpdated: useCallback((reactionEvent: ReactionEvent) => store.setState(state => {
- if (state?.parentMessage?.messageId === reactionEvent?.messageId) {
- state.parentMessage?.applyReactionEvent?.(reactionEvent);
+ let updatedParentMessage = state.parentMessage;
+ if (state.parentMessage?.messageId === reactionEvent?.messageId) {
+ // 원본 객체를 직접 수정 (SDK 메시지 객체는 immutable 패턴을 따르지 않음)
+ state.parentMessage.applyReactionEvent?.(reactionEvent);
+ updatedParentMessage = state.parentMessage;
}
+
+ const updatedMessages = state.allThreadMessages.map((m) => {
+ if (reactionEvent?.messageId === m?.messageId) {
+ // SDK 메시지 객체를 직접 수정 (SDK가 내부적으로 처리)
+ (m as any).applyReactionEvent?.(reactionEvent);
+ return m;
+ }
+ return m;
+ });
+
return {
...state,
- allThreadMessages: state.allThreadMessages.map((m) => {
- if (reactionEvent?.messageId === m?.messageId) {
- m?.applyReactionEvent?.(reactionEvent);
- return m;
- }
- return m;
- }),
+ parentMessage: updatedParentMessage,
+ allThreadMessages: [...updatedMessages], // 새 배열 참조로 리렌더링 트리거
};
}), [store]),
diff --git a/src/utils/storeManager.ts b/src/utils/storeManager.ts
index 2f4f1cf56..09d963713 100644
--- a/src/utils/storeManager.ts
+++ b/src/utils/storeManager.ts
@@ -18,6 +18,13 @@ export function hasStateChanged(prevState: T, updates: Partial): boolean {
*/
return false;
}
+
+ // Special handling for arrays - use shallow comparison for better performance
+ // and to handle cases where array contents are mutated but references change
+ if (Array.isArray(prevState[key as keyof T]) && Array.isArray(value)) {
+ return prevState[key as keyof T] !== value; // Shallow comparison for arrays
+ }
+
return !isEqual(prevState[key as keyof T], value);
});
}
diff --git a/yarn.lock b/yarn.lock
index 5c05c4268..71183e589 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2747,9 +2747,9 @@ __metadata:
languageName: node
linkType: hard
-"@sendbird/chat@npm:^4.18.0":
- version: 4.19.5
- resolution: "@sendbird/chat@npm:4.19.5"
+"@sendbird/chat@npm:^4.20.0":
+ version: 4.20.0
+ resolution: "@sendbird/chat@npm:4.20.0"
peerDependencies:
"@react-native-async-storage/async-storage": ^1.17.6
react-native-mmkv: ">=2.0.0"
@@ -2762,25 +2762,24 @@ __metadata:
languageName: node
linkType: hard
-"@sendbird/react-uikit-message-template-view@npm:^0.0.10":
- version: 0.0.10
- resolution: "@sendbird/react-uikit-message-template-view@npm:0.0.10"
+"@sendbird/react-uikit-message-template-view@npm:^0.0.17":
+ version: 0.0.17
+ resolution: "@sendbird/react-uikit-message-template-view@npm:0.0.17"
dependencies:
- "@sendbird/uikit-message-template": ^0.0.10
+ "@sendbird/uikit-message-template": ^0.0.17
peerDependencies:
- "@sendbird/chat": ">=4.3.0 <5"
react: ">=16.8.6"
react-dom: ">=16.8.6"
- checksum: aac92fb0b963c4ee3f31eea05839cd49c5ad8561c427b5778731fdf61bcbc18076b329ab2866f12b776e77e9b2a9bfbba12263bcf25d4949a34ab80120548d2f
+ checksum: cbfe00b7b0a9eba17350ee31b61167f3811ca4168b304ff7d81281568e1b7ff34e22b6d8e3ab323448148d44724a89d1431aefab58fb49a1a46e9c599ee38205
languageName: node
linkType: hard
-"@sendbird/uikit-message-template@npm:^0.0.10":
- version: 0.0.10
- resolution: "@sendbird/uikit-message-template@npm:0.0.10"
+"@sendbird/uikit-message-template@npm:^0.0.17":
+ version: 0.0.17
+ resolution: "@sendbird/uikit-message-template@npm:0.0.17"
peerDependencies:
react: ">=16.8.6"
- checksum: 18dfce8f7c83d37a94bc3cbca0f561d7ed10c4367bcb2d2bf9c9192fce8fa06cfd87e8f968c6f3ae6d464a5119338ee5167b1a055b777bd906664a225c7e486f
+ checksum: 6622974d07dbbcda09745db2fb03957b759081e33a294a3b90a4e1f95fa7317f7e26954abd79c761fe958efd8332fba6eeb2df72e383f4db468212a869ff83d6
languageName: node
linkType: hard
@@ -2870,13 +2869,13 @@ __metadata:
languageName: unknown
linkType: soft
-"@sendbird/uikit-tools@npm:^0.0.10":
- version: 0.0.10
- resolution: "@sendbird/uikit-tools@npm:0.0.10"
+"@sendbird/uikit-tools@npm:^0.0.17":
+ version: 0.0.17
+ resolution: "@sendbird/uikit-tools@npm:0.0.17"
peerDependencies:
"@sendbird/chat": ">=4.10.5 <5"
react: ">=16.8.6"
- checksum: 1b92fe4a5caced7efff4397fdf87912bc958b45f5eae1f986f78961759b18687901cc28bbc6f797a6fb0e1552e56ef5e04a16da0125883f18b00e99fbee5f44b
+ checksum: 5ae44750a1c497b95d3ee125efc74cfde1fee60a6a3dac1f0cafa03131816c4a49d4ed9b41393c699556a9f77c527beb7af913bd333576a22a7384ef23072a75
languageName: node
linkType: hard
From 36cfad935308a6148d70e36ea10d85990c7bc75c Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Wed, 1 Oct 2025 12:04:41 +0900
Subject: [PATCH 2/9] updated package.json
---
package.json | 2 +-
yarn.lock | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index 2c3a0348d..fee9e1b39 100644
--- a/package.json
+++ b/package.json
@@ -70,7 +70,7 @@
"react-dom": "^16.8.6 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"dependencies": {
- "@sendbird/chat": "^4.20.0",
+ "@sendbird/chat": "^4.19.2",
"@sendbird/react-uikit-message-template-view": "^0.0.17",
"@sendbird/uikit-tools": "^0.0.17",
"css-vars-ponyfill": "^2.3.2",
diff --git a/yarn.lock b/yarn.lock
index 71183e589..8fe0d2235 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2747,7 +2747,7 @@ __metadata:
languageName: node
linkType: hard
-"@sendbird/chat@npm:^4.20.0":
+"@sendbird/chat@npm:^4.19.2":
version: 4.20.0
resolution: "@sendbird/chat@npm:4.20.0"
peerDependencies:
@@ -2758,7 +2758,7 @@ __metadata:
optional: true
react-native-mmkv:
optional: true
- checksum: b67d3b9413ae1b61c4261ef540f7b31b21fec925950a2805ac2cb0eac2c981ec001f8d066bce8fc294d6a104a4ad2a0481c1e907e59fa9bcc8a0081411b729c6
+ checksum: ad614ef86f382aab8c41b333e02f6eab87409650c44d3aad9fab8f67ff3b2ffb331b38c84b3d70cc95cc9cd5f47b0ee568fc50257fa6b3aecd118ac304d7c494
languageName: node
linkType: hard
@@ -2802,9 +2802,9 @@ __metadata:
"@rollup/plugin-node-resolve": ^15.2.3
"@rollup/plugin-replace": ^5.0.4
"@rollup/plugin-typescript": ^11.1.5
- "@sendbird/chat": ^4.18.0
- "@sendbird/react-uikit-message-template-view": ^0.0.10
- "@sendbird/uikit-tools": ^0.0.10
+ "@sendbird/chat": ^4.19.2
+ "@sendbird/react-uikit-message-template-view": ^0.0.17
+ "@sendbird/uikit-tools": ^0.0.17
"@storybook/addon-essentials": ^8.5.0
"@storybook/manager-api": ^8.5.0
"@storybook/react-vite": ^8.5.0
From 087088a61da500f5adf481073eb43776334ecde7 Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Wed, 1 Oct 2025 12:14:46 +0900
Subject: [PATCH 3/9] apply feed
---
src/modules/Thread/context/useThread.ts | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/src/modules/Thread/context/useThread.ts b/src/modules/Thread/context/useThread.ts
index 301b4dbf8..2f86c1e30 100644
--- a/src/modules/Thread/context/useThread.ts
+++ b/src/modules/Thread/context/useThread.ts
@@ -10,6 +10,7 @@ import {
BaseMessage,
MultipleFilesMessage,
ReactionEvent,
+ SendingStatus,
UserMessage,
} from '@sendbird/chat/message';
import { NEXT_THREADS_FETCH_SIZE, PREV_THREADS_FETCH_SIZE } from '../consts';
@@ -57,7 +58,7 @@ const useThread = () => {
const sendMessageStatusActions = {
sendMessageStart: useCallback((message: SendableMessageType) => store.setState(state => {
if ('sendingStatus' in message) {
- (message as any).sendingStatus = 'pending';
+ (message as SendableMessageType).sendingStatus = SendingStatus.PENDING;
}
return {
@@ -71,7 +72,7 @@ const useThread = () => {
sendMessageSuccess: useCallback((message: SendableMessageType) => store.setState(state => {
if ('sendingStatus' in message) {
- (message as any).sendingStatus = 'succeeded';
+ (message as SendableMessageType).sendingStatus = SendingStatus.SUCCEEDED;
}
return {
@@ -90,7 +91,7 @@ const useThread = () => {
sendMessageFailure: useCallback((message: SendableMessageType) => store.setState(state => {
if ('sendingStatus' in message) {
- (message as any).sendingStatus = 'failed';
+ (message as SendableMessageType).sendingStatus = SendingStatus.FAILED;
}
return {
@@ -105,7 +106,7 @@ const useThread = () => {
resendMessageStart: useCallback((message: SendableMessageType) => store.setState(state => {
if ('sendingStatus' in message) {
- (message as any).sendingStatus = 'pending';
+ (message as SendableMessageType).sendingStatus = SendingStatus.PENDING;
}
return {
@@ -255,16 +256,12 @@ const useThread = () => {
const prevThreadMessages = anchorIndex > -1 ? threadedMessages.slice(0, anchorIndex) : threadedMessages;
const nextThreadMessages = anchorIndex > -1 ? threadedMessages.slice(anchorIndex) : [];
- const allThreadMessages = [].concat(
- ...prevThreadMessages, ...nextThreadMessages,
- ) as CoreMessageType[];
-
return {
...state,
threadListState: ThreadListStateTypes.INITIALIZED,
hasMorePrev: anchorIndex === -1 || anchorIndex === PREV_THREADS_FETCH_SIZE,
hasMoreNext: threadedMessages.length - anchorIndex === NEXT_THREADS_FETCH_SIZE,
- allThreadMessages,
+ allThreadMessages: [...prevThreadMessages, ...nextThreadMessages] as CoreMessageType[],
};
}), [store]),
From 4c6fe2fa1b3cb843fb6318c2693c701b8424df05 Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Wed, 1 Oct 2025 12:16:10 +0900
Subject: [PATCH 4/9] apply feed
---
src/modules/Thread/context/useThread.ts | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/modules/Thread/context/useThread.ts b/src/modules/Thread/context/useThread.ts
index 2f86c1e30..212fef957 100644
--- a/src/modules/Thread/context/useThread.ts
+++ b/src/modules/Thread/context/useThread.ts
@@ -416,15 +416,13 @@ const useThread = () => {
onReactionUpdated: useCallback((reactionEvent: ReactionEvent) => store.setState(state => {
let updatedParentMessage = state.parentMessage;
if (state.parentMessage?.messageId === reactionEvent?.messageId) {
- // 원본 객체를 직접 수정 (SDK 메시지 객체는 immutable 패턴을 따르지 않음)
state.parentMessage.applyReactionEvent?.(reactionEvent);
updatedParentMessage = state.parentMessage;
}
const updatedMessages = state.allThreadMessages.map((m) => {
if (reactionEvent?.messageId === m?.messageId) {
- // SDK 메시지 객체를 직접 수정 (SDK가 내부적으로 처리)
- (m as any).applyReactionEvent?.(reactionEvent);
+ (m as CoreMessageType).applyReactionEvent?.(reactionEvent);
return m;
}
return m;
From 82da6eb305fd064cb929cd35eddbd7e30bce2ef1 Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Wed, 1 Oct 2025 14:22:26 +0900
Subject: [PATCH 5/9] fixed bug
---
src/modules/Thread/context/useThread.ts | 11 +++++++----
src/utils/storeManager.ts | 6 ------
2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/src/modules/Thread/context/useThread.ts b/src/modules/Thread/context/useThread.ts
index 212fef957..1bd448e8f 100644
--- a/src/modules/Thread/context/useThread.ts
+++ b/src/modules/Thread/context/useThread.ts
@@ -27,6 +27,8 @@ import useUpdateMessageCallback from './hooks/useUpdateMessageCallback';
import useDeleteMessageCallback from './hooks/useDeleteMessageCallback';
import { useThreadFetchers } from './hooks/useThreadFetchers';
+import { cloneDeep } from 'lodash';
+
function hasReqId(
message: T,
): message is T & { reqId: string } {
@@ -416,14 +418,15 @@ const useThread = () => {
onReactionUpdated: useCallback((reactionEvent: ReactionEvent) => store.setState(state => {
let updatedParentMessage = state.parentMessage;
if (state.parentMessage?.messageId === reactionEvent?.messageId) {
- state.parentMessage.applyReactionEvent?.(reactionEvent);
- updatedParentMessage = state.parentMessage;
+ updatedParentMessage = cloneDeep(state.parentMessage as SendableMessageType);
+ updatedParentMessage.applyReactionEvent(reactionEvent);
}
const updatedMessages = state.allThreadMessages.map((m) => {
if (reactionEvent?.messageId === m?.messageId) {
- (m as CoreMessageType).applyReactionEvent?.(reactionEvent);
- return m;
+ const updatedMessage = cloneDeep(m as CoreMessageType);
+ updatedMessage.applyReactionEvent(reactionEvent);
+ return updatedMessage;
}
return m;
});
diff --git a/src/utils/storeManager.ts b/src/utils/storeManager.ts
index 09d963713..dcfb3e0f5 100644
--- a/src/utils/storeManager.ts
+++ b/src/utils/storeManager.ts
@@ -19,12 +19,6 @@ export function hasStateChanged(prevState: T, updates: Partial): boolean {
return false;
}
- // Special handling for arrays - use shallow comparison for better performance
- // and to handle cases where array contents are mutated but references change
- if (Array.isArray(prevState[key as keyof T]) && Array.isArray(value)) {
- return prevState[key as keyof T] !== value; // Shallow comparison for arrays
- }
-
return !isEqual(prevState[key as keyof T], value);
});
}
From fbc05214aaccf85a8a2581964c8d20571627eb5c Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Wed, 1 Oct 2025 14:24:56 +0900
Subject: [PATCH 6/9] Update src/modules/Thread/context/useThread.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
src/modules/Thread/context/useThread.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/modules/Thread/context/useThread.ts b/src/modules/Thread/context/useThread.ts
index 1bd448e8f..be328924f 100644
--- a/src/modules/Thread/context/useThread.ts
+++ b/src/modules/Thread/context/useThread.ts
@@ -434,7 +434,7 @@ const useThread = () => {
return {
...state,
parentMessage: updatedParentMessage,
- allThreadMessages: [...updatedMessages], // 새 배열 참조로 리렌더링 트리거
+ allThreadMessages: [...updatedMessages], // Create new array reference to trigger re-render
};
}), [store]),
From 93e53dfd3b33a057ec29280c571000c5288c6d9b Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Wed, 1 Oct 2025 15:14:31 +0900
Subject: [PATCH 7/9] Update index.scss
---
src/ui/Checkbox/index.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ui/Checkbox/index.scss b/src/ui/Checkbox/index.scss
index f7f0df0b3..42e9d731e 100644
--- a/src/ui/Checkbox/index.scss
+++ b/src/ui/Checkbox/index.scss
@@ -79,4 +79,4 @@
transform: rotate(45deg);
}
}
-/**rtl:end:ignore**/
+/*rtl:end:ignore*/
From 584650acdcb716a03ed992964d5df44dc32316c1 Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Thu, 2 Oct 2025 12:08:19 +0900
Subject: [PATCH 8/9] Update package.json
---
package.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/package.json b/package.json
index fee9e1b39..bc83d6853 100644
--- a/package.json
+++ b/package.json
@@ -70,9 +70,9 @@
"react-dom": "^16.8.6 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"dependencies": {
- "@sendbird/chat": "^4.19.2",
- "@sendbird/react-uikit-message-template-view": "^0.0.17",
- "@sendbird/uikit-tools": "^0.0.17",
+ "@sendbird/chat": "^4.20.0",
+ "@sendbird/react-uikit-message-template-view": "^0.0.18",
+ "@sendbird/uikit-tools": "^0.0.18",
"css-vars-ponyfill": "^2.3.2",
"date-fns": "^2.16.1",
"dompurify": "^3.2.4"
From 8e20267da731cf8eb0d7c71b5dad1347918e1080 Mon Sep 17 00:00:00 2001
From: danney-chun <63285271+danney-chun@users.noreply.github.com>
Date: Thu, 2 Oct 2025 16:09:51 +0900
Subject: [PATCH 9/9] Update yarn.lock
---
yarn.lock | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/yarn.lock b/yarn.lock
index 8fe0d2235..1133c5f17 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2747,7 +2747,7 @@ __metadata:
languageName: node
linkType: hard
-"@sendbird/chat@npm:^4.19.2":
+"@sendbird/chat@npm:^4.20.0":
version: 4.20.0
resolution: "@sendbird/chat@npm:4.20.0"
peerDependencies:
@@ -2762,24 +2762,24 @@ __metadata:
languageName: node
linkType: hard
-"@sendbird/react-uikit-message-template-view@npm:^0.0.17":
- version: 0.0.17
- resolution: "@sendbird/react-uikit-message-template-view@npm:0.0.17"
+"@sendbird/react-uikit-message-template-view@npm:^0.0.18":
+ version: 0.0.18
+ resolution: "@sendbird/react-uikit-message-template-view@npm:0.0.18"
dependencies:
- "@sendbird/uikit-message-template": ^0.0.17
+ "@sendbird/uikit-message-template": ^0.0.18
peerDependencies:
react: ">=16.8.6"
react-dom: ">=16.8.6"
- checksum: cbfe00b7b0a9eba17350ee31b61167f3811ca4168b304ff7d81281568e1b7ff34e22b6d8e3ab323448148d44724a89d1431aefab58fb49a1a46e9c599ee38205
+ checksum: 1ce96ee2ff96934aa2d3ce092b2b8799701c5b782e84c04d45fe4dc4cfd3755499de013520edf0f599ce356c941ae1793e5a461d550ecadd14ed5f689f395531
languageName: node
linkType: hard
-"@sendbird/uikit-message-template@npm:^0.0.17":
- version: 0.0.17
- resolution: "@sendbird/uikit-message-template@npm:0.0.17"
+"@sendbird/uikit-message-template@npm:^0.0.18":
+ version: 0.0.18
+ resolution: "@sendbird/uikit-message-template@npm:0.0.18"
peerDependencies:
react: ">=16.8.6"
- checksum: 6622974d07dbbcda09745db2fb03957b759081e33a294a3b90a4e1f95fa7317f7e26954abd79c761fe958efd8332fba6eeb2df72e383f4db468212a869ff83d6
+ checksum: c732c8effe55c3cc1f659a41f372e934891828281b03aefc504930bbccfb1ac7c5f7f989217ffeb2dadca98b872aa8bde7fb2c8c92506ce99aba23cf1b89d969
languageName: node
linkType: hard
@@ -2802,9 +2802,9 @@ __metadata:
"@rollup/plugin-node-resolve": ^15.2.3
"@rollup/plugin-replace": ^5.0.4
"@rollup/plugin-typescript": ^11.1.5
- "@sendbird/chat": ^4.19.2
- "@sendbird/react-uikit-message-template-view": ^0.0.17
- "@sendbird/uikit-tools": ^0.0.17
+ "@sendbird/chat": ^4.20.0
+ "@sendbird/react-uikit-message-template-view": ^0.0.18
+ "@sendbird/uikit-tools": ^0.0.18
"@storybook/addon-essentials": ^8.5.0
"@storybook/manager-api": ^8.5.0
"@storybook/react-vite": ^8.5.0
@@ -2869,13 +2869,13 @@ __metadata:
languageName: unknown
linkType: soft
-"@sendbird/uikit-tools@npm:^0.0.17":
- version: 0.0.17
- resolution: "@sendbird/uikit-tools@npm:0.0.17"
+"@sendbird/uikit-tools@npm:^0.0.18":
+ version: 0.0.18
+ resolution: "@sendbird/uikit-tools@npm:0.0.18"
peerDependencies:
"@sendbird/chat": ">=4.10.5 <5"
react: ">=16.8.6"
- checksum: 5ae44750a1c497b95d3ee125efc74cfde1fee60a6a3dac1f0cafa03131816c4a49d4ed9b41393c699556a9f77c527beb7af913bd333576a22a7384ef23072a75
+ checksum: 045565a9e0df7bd180e9a88da8d23543dedc7628b892c1f7e052f576dbc3529f4272852d93434b644a58933371a160de467d9534112df9f9622ab07ca3706b55
languageName: node
linkType: hard