@droppii-org/chat-mobile 0.2.39 → 0.2.40
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/lib/module/screens/chat-detail/PinnedMessageBar.js +4 -1
- package/lib/module/screens/chat-detail/PinnedMessageBar.js.map +1 -1
- package/lib/module/screens/chat-detail/PinnedMessagesSheet.js +80 -110
- package/lib/module/screens/chat-detail/PinnedMessagesSheet.js.map +1 -1
- package/lib/module/screens/chat-detail/PinnedMessagesSheetBackup.js +179 -0
- package/lib/module/screens/chat-detail/PinnedMessagesSheetBackup.js.map +1 -0
- package/lib/module/screens/chat-detail/legend/LegendChatMessage.js +18 -6
- package/lib/module/screens/chat-detail/legend/LegendChatMessage.js.map +1 -1
- package/lib/module/translation/resources/i18n.js +3 -2
- package/lib/module/translation/resources/i18n.js.map +1 -1
- package/lib/module/utils/UIUtils.js +4 -2
- package/lib/module/utils/UIUtils.js.map +1 -1
- package/lib/typescript/src/screens/chat-detail/PinnedMessageBar.d.ts +1 -1
- package/lib/typescript/src/screens/chat-detail/PinnedMessageBar.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/PinnedMessagesSheet.d.ts +1 -1
- package/lib/typescript/src/screens/chat-detail/PinnedMessagesSheet.d.ts.map +1 -1
- package/lib/typescript/src/screens/chat-detail/PinnedMessagesSheetBackup.d.ts +9 -0
- package/lib/typescript/src/screens/chat-detail/PinnedMessagesSheetBackup.d.ts.map +1 -0
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts +2 -1
- package/lib/typescript/src/screens/chat-detail/legend/LegendChatMessage.d.ts.map +1 -1
- package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
- package/lib/typescript/src/types/chat.d.ts +1 -0
- package/lib/typescript/src/types/chat.d.ts.map +1 -1
- package/lib/typescript/src/utils/UIUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/screens/chat-detail/PinnedMessageBar.tsx +17 -8
- package/src/screens/chat-detail/PinnedMessagesSheet.tsx +118 -153
- package/src/screens/chat-detail/PinnedMessagesSheetBackup.tsx +253 -0
- package/src/screens/chat-detail/legend/LegendChatMessage.tsx +26 -13
- package/src/translation/resources/i18n.ts +4 -2
- package/src/types/chat.ts +1 -1
- package/src/utils/UIUtils.ts +3 -1
|
@@ -42,13 +42,14 @@ const i18nKey = {
|
|
|
42
42
|
'chat:pinned_image_subtitle': 'Hình ảnh từ {{sender}}',
|
|
43
43
|
'chat:pinned_video_subtitle': 'Video từ {{sender}}',
|
|
44
44
|
'chat:pinned_file_subtitle': 'Tài liệu từ {{sender}}',
|
|
45
|
-
'chat:pinned_link_subtitle': '
|
|
45
|
+
'chat:pinned_link_subtitle': 'Từ {{sender}}',
|
|
46
46
|
'chat:pin_limit_title': 'Không thể ghim thêm tin nhắn',
|
|
47
47
|
'chat:pin_limit_desc': 'Chỉ được ghim tối đa 5 tin nhắn. Vui lòng bỏ ghim một tin nhắn hiện có trước khi ghim tin nhắn mới.',
|
|
48
48
|
'chat:pin_limit_primary': 'Đã hiểu',
|
|
49
49
|
'chat:pinned_messages_title': 'Tin nhắn đã ghim',
|
|
50
|
-
'chat:pinned_messages_hint': 'Nhấn
|
|
50
|
+
'chat:pinned_messages_hint': 'Nhấn vào tin nhắn để xem tin nhắn gốc, nhấn vào biểu tượng để bỏ ghim',
|
|
51
51
|
'chat:view_original_message': 'Xem tin nhắn gốc',
|
|
52
|
+
'chat:scroll_to_message_todo': 'Tính năng di chuyển đến tin nhắn gốc sẽ sớm được cập nhật',
|
|
52
53
|
'msg_type_image': '[Hình ảnh]',
|
|
53
54
|
'msg_type_voice': '[Tin nhắn thoại]',
|
|
54
55
|
'msg_type_video': '[Video]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["i18nKey","vi"],"sourceRoot":"../../../../src","sources":["translation/resources/i18n.ts"],"mappings":";;AAAA,MAAMA,OAA+B,GAAG;EACtC,0BAA0B,EAAE,gBAAgB;EAC5C,2BAA2B,EAAE,YAAY;EACzC,qBAAqB,EACnB,4EAA4E;EAC9E,qBAAqB,EAAE,kCAAkC;EACzD,uBAAuB,EAAE,oBAAoB;EAC7C,yBAAyB,EAAE,iBAAiB;EAC5C,+BAA+B,EAAE,6BAA6B;EAC9D,uBAAuB,EAAE,oCAAoC;EAC7D,8BAA8B,EAAE,gCAAgC;EAChE,2BAA2B,EAAE,kBAAkB;EAC/C,uBAAuB,EAAE,sBAAsB;EAC/C,oBAAoB,EAAE,eAAe;EACrC,sBAAsB,EACpB,sFAAsF;EACxF,sBAAsB,EACpB,gFAAgF;EAClF,iBAAiB,EAAE,YAAY;EAC/B,0BAA0B,EAAE,gCAAgC;EAC5D,oBAAoB,EAAE,gCAAgC;EACtD,6BAA6B,EAAE,kCAAkC;EACjE,eAAe,EAAE,SAAS;EAC1B,gBAAgB,EAAE,YAAY;EAC9B,iBAAiB,EAAE,SAAS;EAC5B,WAAW,EAAE,KAAK;EAClB,YAAY,EAAE,SAAS;EACvB,2BAA2B,EAAE,6BAA6B;EAC1D,mBAAmB,EAAE,kBAAkB;EACvC,yBAAyB,EAAE,kBAAkB;EAC7C,qBAAqB,EAAE,0BAA0B;EACjD,mBAAmB,EAAE,mBAAmB;EACxC,wBAAwB,EAAE,6BAA6B;EACvD,2BAA2B,EAAE,8BAA8B;EAC3D,gCAAgC,EAAE,wCAAwC;EAC1E,oBAAoB,EAAE,SAAS;EAC/B,qBAAqB,EAAE,SAAS;EAChC,kBAAkB,EAAE,MAAM;EAC1B,oBAAoB,EAAE,SAAS;EAC/B,0BAA0B,EAAE,kBAAkB;EAC9C,4BAA4B,EAAE,qBAAqB;EACnD,8BAA8B,EAAE,wBAAwB;EACxD,4BAA4B,EAAE,wBAAwB;EACtD,4BAA4B,EAAE,qBAAqB;EACnD,2BAA2B,EAAE,wBAAwB;EACrD,2BAA2B,EAAE,
|
|
1
|
+
{"version":3,"names":["i18nKey","vi"],"sourceRoot":"../../../../src","sources":["translation/resources/i18n.ts"],"mappings":";;AAAA,MAAMA,OAA+B,GAAG;EACtC,0BAA0B,EAAE,gBAAgB;EAC5C,2BAA2B,EAAE,YAAY;EACzC,qBAAqB,EACnB,4EAA4E;EAC9E,qBAAqB,EAAE,kCAAkC;EACzD,uBAAuB,EAAE,oBAAoB;EAC7C,yBAAyB,EAAE,iBAAiB;EAC5C,+BAA+B,EAAE,6BAA6B;EAC9D,uBAAuB,EAAE,oCAAoC;EAC7D,8BAA8B,EAAE,gCAAgC;EAChE,2BAA2B,EAAE,kBAAkB;EAC/C,uBAAuB,EAAE,sBAAsB;EAC/C,oBAAoB,EAAE,eAAe;EACrC,sBAAsB,EACpB,sFAAsF;EACxF,sBAAsB,EACpB,gFAAgF;EAClF,iBAAiB,EAAE,YAAY;EAC/B,0BAA0B,EAAE,gCAAgC;EAC5D,oBAAoB,EAAE,gCAAgC;EACtD,6BAA6B,EAAE,kCAAkC;EACjE,eAAe,EAAE,SAAS;EAC1B,gBAAgB,EAAE,YAAY;EAC9B,iBAAiB,EAAE,SAAS;EAC5B,WAAW,EAAE,KAAK;EAClB,YAAY,EAAE,SAAS;EACvB,2BAA2B,EAAE,6BAA6B;EAC1D,mBAAmB,EAAE,kBAAkB;EACvC,yBAAyB,EAAE,kBAAkB;EAC7C,qBAAqB,EAAE,0BAA0B;EACjD,mBAAmB,EAAE,mBAAmB;EACxC,wBAAwB,EAAE,6BAA6B;EACvD,2BAA2B,EAAE,8BAA8B;EAC3D,gCAAgC,EAAE,wCAAwC;EAC1E,oBAAoB,EAAE,SAAS;EAC/B,qBAAqB,EAAE,SAAS;EAChC,kBAAkB,EAAE,MAAM;EAC1B,oBAAoB,EAAE,SAAS;EAC/B,0BAA0B,EAAE,kBAAkB;EAC9C,4BAA4B,EAAE,qBAAqB;EACnD,8BAA8B,EAAE,wBAAwB;EACxD,4BAA4B,EAAE,wBAAwB;EACtD,4BAA4B,EAAE,qBAAqB;EACnD,2BAA2B,EAAE,wBAAwB;EACrD,2BAA2B,EAAE,eAAe;EAC5C,sBAAsB,EAAE,8BAA8B;EACtD,qBAAqB,EACnB,qGAAqG;EACvG,wBAAwB,EAAE,SAAS;EACnC,4BAA4B,EAAE,kBAAkB;EAChD,2BAA2B,EACzB,uEAAuE;EACzE,4BAA4B,EAAE,kBAAkB;EAChD,6BAA6B,EAC3B,2DAA2D;EAC7D,gBAAgB,EAAE,YAAY;EAC9B,gBAAgB,EAAE,kBAAkB;EACpC,gBAAgB,EAAE,SAAS;EAC3B,eAAe,EAAE,iBAAiB;EAClC,eAAe,EAAE,YAAY;EAC7B,iBAAiB,EAAE,qBAAqB;EACxC,wBAAwB,EAAE,gCAAgC;EAC1D,kBAAkB,EAAE,eAAe;EACnC,oBAAoB,EAAE,eAAe;EACrC,yBAAyB,EAAE,eAAe;EAC1C,wBAAwB,EACtB,qGAAqG;EACvG,2BAA2B,EAAE,eAAe;EAC5C,6BAA6B,EAAE,UAAU;EACzC,yBAAyB,EAAE,kBAAkB;EAC7C,2BAA2B,EAAE,kBAAkB;EAC/C,OAAO,EAAE,SAAS;EAClB,SAAS,EAAE,aAAa;EACxB,SAAS,EAAE,WAAW;EACtB,QAAQ,EAAE,UAAU;EACpB,WAAW,EAAE,UAAU;EACvB,YAAY,EAAE,cAAc;EAC5B,cAAc,EAAE,cAAc;EAC9B,oBAAoB,EAAE,cAAc;EACpC,oBAAoB,EAAE,SAAS;EAC/B,eAAe,EAAE,kBAAkB;EACnC,UAAU,EAAE,YAAY;EACxB,KAAK,EAAE;AACT,CAAC;AAED,eAAe;EACbC,EAAE,EAAED;AACN,CAAC","ignoreList":[]}
|
|
@@ -19,7 +19,8 @@ const defaultAdapter = {
|
|
|
19
19
|
open: openWithAlert
|
|
20
20
|
},
|
|
21
21
|
bottomSheet: {
|
|
22
|
-
open: openWithAlert
|
|
22
|
+
open: openWithAlert,
|
|
23
|
+
dismiss: () => {}
|
|
23
24
|
}
|
|
24
25
|
};
|
|
25
26
|
let _adapter = {};
|
|
@@ -37,7 +38,8 @@ export const UIUtils = {
|
|
|
37
38
|
open: params => (_adapter.popup ?? defaultAdapter.popup).open(params)
|
|
38
39
|
},
|
|
39
40
|
bottomSheet: {
|
|
40
|
-
open: params => (_adapter.bottomSheet ?? defaultAdapter.bottomSheet).open(params)
|
|
41
|
+
open: params => (_adapter.bottomSheet ?? defaultAdapter.bottomSheet).open(params),
|
|
42
|
+
dismiss: () => (_adapter.bottomSheet ?? defaultAdapter.bottomSheet).dismiss()
|
|
41
43
|
}
|
|
42
44
|
};
|
|
43
45
|
//# sourceMappingURL=UIUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Alert","openWithAlert","params","title","message","alert","defaultAdapter","toast","open","popup","bottomSheet","_adapter","registerUIUtils","adapter","UIUtils"],"sourceRoot":"../../../src","sources":["utils/UIUtils.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,cAAc;AAGpC,MAAMC,aAAa,GAAIC,MAA4C,IAAK;EACtE,MAAM;IAAEC,KAAK,GAAG,SAAS;IAAEC,OAAO,GAAG;EAAG,CAAC,GAAGF,MAAM,IAAI,CAAC,CAAC;EACxDF,KAAK,CAACK,KAAK,CAACF,KAAK,EAAEC,OAAO,CAAC;AAC7B,CAAC;AAED,MAAME,cAAuC,GAAG;EAC9CC,KAAK,EAAE;IAAEC,IAAI,EAAEP;EAAc,CAAC;EAC9BI,KAAK,EAAE;IAAEG,IAAI,EAAEP;EAAc,CAAC;EAC9BQ,KAAK,EAAE;IAAED,IAAI,EAAEP;EAAc,CAAC;EAC9BS,WAAW,EAAE;IAAEF,IAAI,EAAEP;
|
|
1
|
+
{"version":3,"names":["Alert","openWithAlert","params","title","message","alert","defaultAdapter","toast","open","popup","bottomSheet","dismiss","_adapter","registerUIUtils","adapter","UIUtils"],"sourceRoot":"../../../src","sources":["utils/UIUtils.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,cAAc;AAGpC,MAAMC,aAAa,GAAIC,MAA4C,IAAK;EACtE,MAAM;IAAEC,KAAK,GAAG,SAAS;IAAEC,OAAO,GAAG;EAAG,CAAC,GAAGF,MAAM,IAAI,CAAC,CAAC;EACxDF,KAAK,CAACK,KAAK,CAACF,KAAK,EAAEC,OAAO,CAAC;AAC7B,CAAC;AAED,MAAME,cAAuC,GAAG;EAC9CC,KAAK,EAAE;IAAEC,IAAI,EAAEP;EAAc,CAAC;EAC9BI,KAAK,EAAE;IAAEG,IAAI,EAAEP;EAAc,CAAC;EAC9BQ,KAAK,EAAE;IAAED,IAAI,EAAEP;EAAc,CAAC;EAC9BS,WAAW,EAAE;IAAEF,IAAI,EAAEP,aAAa;IAAEU,OAAO,EAAEA,CAAA,KAAM,CAAC;EAAE;AACxD,CAAC;AAED,IAAIC,QAAuB,GAAG,CAAC,CAAC;AAEhC,OAAO,MAAMC,eAAe,GAAIC,OAAsB,IAAW;EAC/DF,QAAQ,GAAGE,OAAO;AACpB,CAAC;AAED,OAAO,MAAMC,OAAgC,GAAG;EAC9CR,KAAK,EAAE;IACLC,IAAI,EAAGN,MAAM,IAAK,CAACU,QAAQ,CAACL,KAAK,IAAID,cAAc,CAACC,KAAK,EAAEC,IAAI,CAACN,MAAM;EACxE,CAAC;EACDG,KAAK,EAAE;IACLG,IAAI,EAAGN,MAAM,IAAK,CAACU,QAAQ,CAACP,KAAK,IAAIC,cAAc,CAACD,KAAK,EAAEG,IAAI,CAACN,MAAM;EACxE,CAAC;EACDO,KAAK,EAAE;IACLD,IAAI,EAAGN,MAAM,IAAK,CAACU,QAAQ,CAACH,KAAK,IAAIH,cAAc,CAACG,KAAK,EAAED,IAAI,CAACN,MAAM;EACxE,CAAC;EACDQ,WAAW,EAAE;IACXF,IAAI,EAAGN,MAAM,IACX,CAACU,QAAQ,CAACF,WAAW,IAAIJ,cAAc,CAACI,WAAW,EAAEF,IAAI,CAACN,MAAM,CAAC;IACnES,OAAO,EAAEA,CAAA,KACP,CAACC,QAAQ,CAACF,WAAW,IAAIJ,cAAc,CAACI,WAAW,EAAEC,OAAO,CAAC;EACjE;AACF,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PinnedMessageBar.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/PinnedMessageBar.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"PinnedMessageBar.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/PinnedMessageBar.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAQ9E,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAsDD,eAAO,MAAM,gBAAgB,6EACY,qBAAqB,iCAoE7D,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import type
|
|
2
|
+
import { type MessageItem } from '@droppii/openim-rn-client-sdk';
|
|
3
3
|
export interface OpenPinnedMessagesSheetParams {
|
|
4
4
|
currentUserId?: string;
|
|
5
5
|
unpinMessage: (message: MessageItem) => void | Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PinnedMessagesSheet.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/PinnedMessagesSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PinnedMessagesSheet.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/PinnedMessagesSheet.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAgL9E,MAAM,WAAW,6BAA6B;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D;AAED,eAAO,MAAM,uBAAuB,GAAI,4DAIrC,6BAA6B,SAkB/B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { MessageItem } from '@droppii/openim-rn-client-sdk';
|
|
3
|
+
export interface OpenPinnedMessagesSheetParams {
|
|
4
|
+
currentUserId?: string;
|
|
5
|
+
unpinMessage: (message: MessageItem) => void | Promise<void>;
|
|
6
|
+
customMessageItemFactory?: (item: MessageItem) => ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare const openPinnedMessagesSheet: ({ currentUserId, unpinMessage, customMessageItemFactory, }: OpenPinnedMessagesSheetParams) => void;
|
|
9
|
+
//# sourceMappingURL=PinnedMessagesSheetBackup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PinnedMessagesSheetBackup.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/PinnedMessagesSheetBackup.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAsNjE,MAAM,WAAW,6BAA6B;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D;AAED,eAAO,MAAM,uBAAuB,GAAI,4DAIrC,6BAA6B,SAkB/B,CAAC"}
|
|
@@ -8,9 +8,10 @@ interface LegendChatMessageProps {
|
|
|
8
8
|
onMediaPress?: (items: MediaItem[], index?: number) => void;
|
|
9
9
|
onPressUrl?: (url: string) => void;
|
|
10
10
|
onRetry?: (message: MessageItem) => void;
|
|
11
|
+
onPress?: () => void;
|
|
11
12
|
onLongPress?: () => void;
|
|
12
13
|
customMessageItemFactory?: (m: MessageItem) => ReactNode;
|
|
13
14
|
}
|
|
14
|
-
export declare const LegendChatMessage: import("react").MemoExoticComponent<({ message, isOutgoing, createdAtTime, onMediaPress, onPressUrl, onRetry, onLongPress, customMessageItemFactory, }: LegendChatMessageProps) => string | number | bigint | true | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode>> | import("react").JSX.Element>;
|
|
15
|
+
export declare const LegendChatMessage: import("react").MemoExoticComponent<({ message, isOutgoing, createdAtTime, onMediaPress, onPressUrl, onRetry, onPress, onLongPress, customMessageItemFactory, }: LegendChatMessageProps) => string | number | bigint | true | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode>> | import("react").JSX.Element>;
|
|
15
16
|
export {};
|
|
16
17
|
//# sourceMappingURL=LegendChatMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendChatMessage.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/legend/LegendChatMessage.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoC,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAkB/D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,wBAAwB,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,SAAS,CAAC;CAC1D;AAyBD,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"LegendChatMessage.d.ts","sourceRoot":"","sources":["../../../../../../src/screens/chat-detail/legend/LegendChatMessage.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoC,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAkB/D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,wBAAwB,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,SAAS,CAAC;CAC1D;AAyBD,eAAO,MAAM,iBAAiB,mKAWzB,sBAAsB,wRA8C1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../src/translation/resources/i18n.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../../../src/translation/resources/i18n.ts"],"names":[],"mappings":";;;AAsFA,wBAEE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../../src/types/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC;AAErD,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX,KAAK,KAAK,GAAG,CACX,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,GAAG,EACZ,QAAQ,CAAC,EAAE,GAAG,MAAM,OAAO,aAAa,EAAE,KACvC,IAAI,CAAC;AAEV,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAC;IACxC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAC;IACxC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAC;IACxC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../../src/types/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/UIUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgBnD,eAAO,MAAM,eAAe,GAAI,SAAS,aAAa,KAAG,IAExD,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,aAAa,
|
|
1
|
+
{"version":3,"file":"UIUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/UIUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgBnD,eAAO,MAAM,eAAe,GAAI,SAAS,aAAa,KAAG,IAExD,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC,aAAa,CAgB3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -13,7 +13,13 @@ import {
|
|
|
13
13
|
getMessagePreviewParts,
|
|
14
14
|
getPinnedMessagePreview,
|
|
15
15
|
} from '../../utils/messageUtils';
|
|
16
|
-
import type
|
|
16
|
+
import { MessageType, type MessageItem } from '@droppii/openim-rn-client-sdk';
|
|
17
|
+
|
|
18
|
+
const HIDDEN_PREVIEW_TEXT_TYPES = new Set([
|
|
19
|
+
MessageType.PictureMessage,
|
|
20
|
+
MessageType.VideoMessage,
|
|
21
|
+
MessageType.MergeMessage,
|
|
22
|
+
]);
|
|
17
23
|
|
|
18
24
|
interface PinnedMessageBarProps {
|
|
19
25
|
messages: MessageItem[];
|
|
@@ -85,6 +91,7 @@ export const PinnedMessageBar = memo(
|
|
|
85
91
|
const remainingCount = messages.length - 1;
|
|
86
92
|
const { subtitleKey } = getPinnedMessagePreview(latest);
|
|
87
93
|
const messagePreview = getMessagePreviewParts(latest);
|
|
94
|
+
const hidePreviewText = HIDDEN_PREVIEW_TEXT_TYPES.has(latest.contentType);
|
|
88
95
|
|
|
89
96
|
return (
|
|
90
97
|
<KContainer.Touchable
|
|
@@ -96,13 +103,15 @@ export const PinnedMessageBar = memo(
|
|
|
96
103
|
|
|
97
104
|
<KContainer.View row alignItems flex paddingR="0.75rem">
|
|
98
105
|
<KContainer.View style={styles.content}>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
{!hidePreviewText && (
|
|
107
|
+
<KLabel.Text
|
|
108
|
+
typo="TextNmMedium"
|
|
109
|
+
numberOfLines={1}
|
|
110
|
+
{...messagePreview.textProps}
|
|
111
|
+
>
|
|
112
|
+
{messagePreview.text}
|
|
113
|
+
</KLabel.Text>
|
|
114
|
+
)}
|
|
106
115
|
|
|
107
116
|
<KContainer.View row alignItems paddingR="0.75rem">
|
|
108
117
|
<KImage.VectorIcons
|
|
@@ -1,127 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
forwardRef,
|
|
3
|
-
memo,
|
|
4
|
-
useCallback,
|
|
5
|
-
useImperativeHandle,
|
|
6
|
-
useRef,
|
|
7
|
-
useState,
|
|
8
|
-
} from 'react';
|
|
1
|
+
import { memo, useCallback } from 'react';
|
|
9
2
|
import type { ReactNode } from 'react';
|
|
10
|
-
import {
|
|
11
|
-
import type
|
|
12
|
-
import {
|
|
3
|
+
import { StyleSheet } from 'react-native';
|
|
4
|
+
import { MessageType, type MessageItem } from '@droppii/openim-rn-client-sdk';
|
|
5
|
+
import {
|
|
6
|
+
KContainer,
|
|
7
|
+
KLabel,
|
|
8
|
+
KColors,
|
|
9
|
+
KImage,
|
|
10
|
+
KSpacingValue,
|
|
11
|
+
} from '@droppii/libs';
|
|
13
12
|
import { UIUtils } from '../../utils/UIUtils';
|
|
14
13
|
import { trans } from '../../translation';
|
|
15
14
|
import { usePinnedMessageStore } from '../../store/pinnedMessage';
|
|
16
15
|
import { LegendChatMessage } from './legend/LegendChatMessage';
|
|
17
|
-
import { formatMessageTime
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
currentUserId?: string;
|
|
29
|
-
unpinMessage: (message: MessageItem) => void | Promise<void>;
|
|
30
|
-
customMessageItemFactory?: (item: MessageItem) => ReactNode;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Mirrors MessageToolboxOverlay (used for the main chat list's long-press
|
|
34
|
-
// menu) but restricted to the 2 actions relevant to an already-pinned
|
|
35
|
-
// message: unpin and jump to the original message.
|
|
36
|
-
const PinnedMessageToolboxOverlay = memo(
|
|
37
|
-
forwardRef<PinnedMessageToolboxRef, PinnedMessageToolboxOverlayProps>(
|
|
38
|
-
({ currentUserId, unpinMessage, customMessageItemFactory }, ref) => {
|
|
39
|
-
const [visible, setVisible] = useState(false);
|
|
40
|
-
const [message, setMessage] = useState<MessageItem | undefined>(
|
|
41
|
-
undefined
|
|
42
|
-
);
|
|
43
|
-
const [rect, setRect] = useState<MeasuredRect | null>(null);
|
|
44
|
-
|
|
45
|
-
const hide = useCallback(() => {
|
|
46
|
-
setVisible(false);
|
|
47
|
-
setMessage(undefined);
|
|
48
|
-
setRect(null);
|
|
49
|
-
}, []);
|
|
50
|
-
|
|
51
|
-
const show = useCallback((msg: MessageItem, msgRect: MeasuredRect) => {
|
|
52
|
-
setMessage(msg);
|
|
53
|
-
setRect(msgRect);
|
|
54
|
-
setVisible(true);
|
|
55
|
-
}, []);
|
|
56
|
-
|
|
57
|
-
useImperativeHandle(ref, () => ({ show, hide }), [show, hide]);
|
|
58
|
-
|
|
59
|
-
const handleUnpinMessage = useCallback(() => {
|
|
60
|
-
if (!message) return;
|
|
61
|
-
hide();
|
|
62
|
-
unpinMessage(message);
|
|
63
|
-
}, [message, hide, unpinMessage]);
|
|
64
|
-
|
|
65
|
-
const handleViewOriginalMessage = useCallback(() => {
|
|
66
|
-
if (!message) return;
|
|
67
|
-
hide();
|
|
68
|
-
// TODO: implement navigating to / highlighting the original message
|
|
69
|
-
}, [message, hide]);
|
|
70
|
-
|
|
71
|
-
if (!visible || !message || !rect) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
const isOutgoing = message.sendID === currentUserId;
|
|
76
|
-
|
|
77
|
-
return (
|
|
78
|
-
<Modal
|
|
79
|
-
visible={visible}
|
|
80
|
-
transparent
|
|
81
|
-
statusBarTranslucent
|
|
82
|
-
animationType="fade"
|
|
83
|
-
onRequestClose={hide}
|
|
84
|
-
>
|
|
85
|
-
<Pressable style={styles.backdrop} onPress={hide} />
|
|
86
|
-
|
|
87
|
-
<MessageToolboxWrapper
|
|
88
|
-
rect={rect}
|
|
89
|
-
isOutgoing={isOutgoing}
|
|
90
|
-
message={
|
|
91
|
-
<LegendChatMessage
|
|
92
|
-
message={message}
|
|
93
|
-
isOutgoing={isOutgoing}
|
|
94
|
-
createdAtTime={message.sendTime || message.createTime}
|
|
95
|
-
customMessageItemFactory={customMessageItemFactory}
|
|
96
|
-
/>
|
|
97
|
-
}
|
|
98
|
-
toolbox={
|
|
99
|
-
<MessageToolboxMenu
|
|
100
|
-
showUnpinMessage
|
|
101
|
-
showViewOriginalMessage
|
|
102
|
-
onUnpinMessage={handleUnpinMessage}
|
|
103
|
-
onViewOriginalMessage={handleViewOriginalMessage}
|
|
104
|
-
/>
|
|
105
|
-
}
|
|
106
|
-
/>
|
|
107
|
-
</Modal>
|
|
108
|
-
);
|
|
109
|
-
}
|
|
110
|
-
)
|
|
111
|
-
);
|
|
112
|
-
|
|
113
|
-
PinnedMessageToolboxOverlay.displayName = 'PinnedMessageToolboxOverlay';
|
|
114
|
-
|
|
115
|
-
const styles = StyleSheet.create({
|
|
116
|
-
backdrop: {
|
|
117
|
-
position: 'absolute',
|
|
118
|
-
top: 0,
|
|
119
|
-
left: 0,
|
|
120
|
-
right: 0,
|
|
121
|
-
bottom: 0,
|
|
122
|
-
backgroundColor: 'rgba(0,0,0,0.75)',
|
|
123
|
-
},
|
|
124
|
-
});
|
|
16
|
+
import { formatMessageTime } from './legend/messageTypes';
|
|
17
|
+
|
|
18
|
+
// Text/quote/link bubbles already render their own timestamp for incoming
|
|
19
|
+
// messages (see textMessage, quotedMessage, linkMessage) — skip the external
|
|
20
|
+
// label for those to avoid showing the time twice.
|
|
21
|
+
const SELF_RENDERS_TIME_FOR_INCOMING = new Set([
|
|
22
|
+
MessageType.TextMessage,
|
|
23
|
+
MessageType.AtTextMessage,
|
|
24
|
+
MessageType.QuoteMessage,
|
|
25
|
+
MessageType.UrlTextMessage,
|
|
26
|
+
]);
|
|
125
27
|
|
|
126
28
|
interface PinnedMessagesSheetContentProps {
|
|
127
29
|
currentUserId?: string;
|
|
@@ -136,19 +38,25 @@ const PinnedMessagesSheetContent = memo(
|
|
|
136
38
|
customMessageItemFactory,
|
|
137
39
|
}: PinnedMessagesSheetContentProps) => {
|
|
138
40
|
const messages = usePinnedMessageStore((state) => state.messages);
|
|
139
|
-
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
toolboxRef.current?.show(message, { x, y, width, height });
|
|
147
|
-
});
|
|
41
|
+
|
|
42
|
+
const handleUnpinMessage = useCallback(
|
|
43
|
+
async (message: MessageItem) => {
|
|
44
|
+
await unpinMessage(message);
|
|
45
|
+
if (usePinnedMessageStore.getState().messages.length === 0) {
|
|
46
|
+
UIUtils.bottomSheet.dismiss();
|
|
47
|
+
}
|
|
148
48
|
},
|
|
149
|
-
[]
|
|
49
|
+
[unpinMessage]
|
|
150
50
|
);
|
|
151
51
|
|
|
52
|
+
const handlePressMessage = useCallback(() => {
|
|
53
|
+
UIUtils.bottomSheet.dismiss();
|
|
54
|
+
UIUtils.alert.open({
|
|
55
|
+
title: trans('chat:view_original_message'),
|
|
56
|
+
message: trans('chat:scroll_to_message_todo'),
|
|
57
|
+
});
|
|
58
|
+
}, []);
|
|
59
|
+
|
|
152
60
|
return (
|
|
153
61
|
<KContainer.View paddingV="0.5rem">
|
|
154
62
|
<KLabel.Text
|
|
@@ -164,28 +72,58 @@ const PinnedMessagesSheetContent = memo(
|
|
|
164
72
|
const isOutgoing = message.sendID === currentUserId;
|
|
165
73
|
const messageId = message.clientMsgID || message.serverMsgID;
|
|
166
74
|
const createdAtTime = message.sendTime || message.createTime;
|
|
167
|
-
const
|
|
75
|
+
const hasInternalTimeLabel =
|
|
76
|
+
!isOutgoing &&
|
|
77
|
+
SELF_RENDERS_TIME_FOR_INCOMING.has(message.contentType);
|
|
78
|
+
const timeLabel = hasInternalTimeLabel
|
|
79
|
+
? ''
|
|
80
|
+
: formatMessageTime(createdAtTime);
|
|
81
|
+
|
|
82
|
+
const unpinButton = (
|
|
83
|
+
<KContainer.Touchable
|
|
84
|
+
center
|
|
85
|
+
br="round"
|
|
86
|
+
width={28}
|
|
87
|
+
height={28}
|
|
88
|
+
background={KColors.background}
|
|
89
|
+
style={
|
|
90
|
+
isOutgoing ? styles.unpinButtonLeft : styles.unpinButtonRight
|
|
91
|
+
}
|
|
92
|
+
onPress={() => handleUnpinMessage(message)}
|
|
93
|
+
>
|
|
94
|
+
<KImage.VectorIcons
|
|
95
|
+
name="thumbtack-off-o"
|
|
96
|
+
provider="DroppiiNew"
|
|
97
|
+
size={14}
|
|
98
|
+
color={KColors.gray.dark}
|
|
99
|
+
/>
|
|
100
|
+
</KContainer.Touchable>
|
|
101
|
+
);
|
|
168
102
|
|
|
169
103
|
return (
|
|
170
104
|
<KContainer.View
|
|
171
105
|
key={messageId}
|
|
172
|
-
|
|
173
|
-
if (node) rowRefsMap.current.set(messageId, node);
|
|
174
|
-
else rowRefsMap.current.delete(messageId);
|
|
175
|
-
}}
|
|
176
|
-
style={
|
|
177
|
-
isOutgoing
|
|
178
|
-
? messageStyles.messageRowRight
|
|
179
|
-
: messageStyles.messageRowLeft
|
|
180
|
-
}
|
|
106
|
+
style={isOutgoing ? styles.rowRight : styles.rowLeft}
|
|
181
107
|
>
|
|
182
|
-
<
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
108
|
+
<KContainer.View
|
|
109
|
+
style={[
|
|
110
|
+
styles.messageRow,
|
|
111
|
+
isOutgoing ? styles.messageRowRight : styles.messageRowLeft,
|
|
112
|
+
]}
|
|
113
|
+
>
|
|
114
|
+
{isOutgoing && unpinButton}
|
|
115
|
+
|
|
116
|
+
<LegendChatMessage
|
|
117
|
+
message={message}
|
|
118
|
+
isOutgoing={isOutgoing}
|
|
119
|
+
createdAtTime={createdAtTime}
|
|
120
|
+
onPress={handlePressMessage}
|
|
121
|
+
customMessageItemFactory={customMessageItemFactory}
|
|
122
|
+
/>
|
|
123
|
+
|
|
124
|
+
{!isOutgoing && unpinButton}
|
|
125
|
+
</KContainer.View>
|
|
126
|
+
|
|
189
127
|
{!!timeLabel && (
|
|
190
128
|
<KLabel.Text
|
|
191
129
|
typo="TextXsNormal"
|
|
@@ -198,13 +136,6 @@ const PinnedMessagesSheetContent = memo(
|
|
|
198
136
|
</KContainer.View>
|
|
199
137
|
);
|
|
200
138
|
})}
|
|
201
|
-
|
|
202
|
-
<PinnedMessageToolboxOverlay
|
|
203
|
-
ref={toolboxRef}
|
|
204
|
-
currentUserId={currentUserId}
|
|
205
|
-
unpinMessage={unpinMessage}
|
|
206
|
-
customMessageItemFactory={customMessageItemFactory}
|
|
207
|
-
/>
|
|
208
139
|
</KContainer.View>
|
|
209
140
|
);
|
|
210
141
|
}
|
|
@@ -212,6 +143,40 @@ const PinnedMessagesSheetContent = memo(
|
|
|
212
143
|
|
|
213
144
|
PinnedMessagesSheetContent.displayName = 'PinnedMessagesSheetContent';
|
|
214
145
|
|
|
146
|
+
const UNPIN_BUTTON_GAP = KSpacingValue['0.5rem'];
|
|
147
|
+
|
|
148
|
+
const styles = StyleSheet.create({
|
|
149
|
+
rowLeft: {
|
|
150
|
+
width: '100%',
|
|
151
|
+
paddingHorizontal: KSpacingValue['0.75rem'],
|
|
152
|
+
marginBottom: KSpacingValue['0.25rem'],
|
|
153
|
+
alignItems: 'flex-start',
|
|
154
|
+
},
|
|
155
|
+
rowRight: {
|
|
156
|
+
width: '100%',
|
|
157
|
+
paddingHorizontal: KSpacingValue['0.75rem'],
|
|
158
|
+
marginBottom: KSpacingValue['0.25rem'],
|
|
159
|
+
alignItems: 'flex-end',
|
|
160
|
+
},
|
|
161
|
+
messageRow: {
|
|
162
|
+
width: '100%',
|
|
163
|
+
flexDirection: 'row',
|
|
164
|
+
alignItems: 'center',
|
|
165
|
+
},
|
|
166
|
+
messageRowLeft: {
|
|
167
|
+
justifyContent: 'flex-start',
|
|
168
|
+
},
|
|
169
|
+
messageRowRight: {
|
|
170
|
+
justifyContent: 'flex-end',
|
|
171
|
+
},
|
|
172
|
+
unpinButtonLeft: {
|
|
173
|
+
marginRight: UNPIN_BUTTON_GAP,
|
|
174
|
+
},
|
|
175
|
+
unpinButtonRight: {
|
|
176
|
+
marginLeft: UNPIN_BUTTON_GAP,
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
|
|
215
180
|
export interface OpenPinnedMessagesSheetParams {
|
|
216
181
|
currentUserId?: string;
|
|
217
182
|
unpinMessage: (message: MessageItem) => void | Promise<void>;
|