@droppii-org/chat-mobile 0.2.17 → 0.2.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.
Files changed (96) hide show
  1. package/lib/module/assets/images/icon_excel.png +0 -0
  2. package/lib/module/assets/images/icon_img.png +0 -0
  3. package/lib/module/assets/images/icon_pdf.png +0 -0
  4. package/lib/module/assets/images/icon_txt.png +0 -0
  5. package/lib/module/assets/images/icon_word.png +0 -0
  6. package/lib/module/assets/images/index.js +5 -0
  7. package/lib/module/assets/images/index.js.map +1 -1
  8. package/lib/module/components/AttachmentPreview/FilePreview.js +107 -0
  9. package/lib/module/components/AttachmentPreview/FilePreview.js.map +1 -0
  10. package/lib/module/components/AttachmentPreview/MediaPreview.js +212 -0
  11. package/lib/module/components/AttachmentPreview/MediaPreview.js.map +1 -0
  12. package/lib/module/components/AttachmentPreview/index.js +49 -0
  13. package/lib/module/components/AttachmentPreview/index.js.map +1 -0
  14. package/lib/module/components/messages/fileMessage/index.js +122 -12
  15. package/lib/module/components/messages/fileMessage/index.js.map +1 -1
  16. package/lib/module/hooks/useFileAttachment.js +116 -0
  17. package/lib/module/hooks/useFileAttachment.js.map +1 -0
  18. package/lib/module/hooks/useFileDownload.js +175 -0
  19. package/lib/module/hooks/useFileDownload.js.map +1 -0
  20. package/lib/module/index.js +1 -1
  21. package/lib/module/index.js.map +1 -1
  22. package/lib/module/screens/chat-detail/ChatComposer.js +44 -36
  23. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
  24. package/lib/module/screens/chat-detail/hooks/useAttachmentMapping.js +51 -0
  25. package/lib/module/screens/chat-detail/hooks/useAttachmentMapping.js.map +1 -0
  26. package/lib/module/screens/chat-detail/hooks/useAttachmentSendHandler.js +39 -13
  27. package/lib/module/screens/chat-detail/hooks/useAttachmentSendHandler.js.map +1 -1
  28. package/lib/module/services/attachmentHandlers/fileAttachmentHandler.js +6 -6
  29. package/lib/module/services/attachmentHandlers/fileAttachmentHandler.js.map +1 -1
  30. package/lib/module/services/attachmentHandlers/index.js +1 -1
  31. package/lib/module/services/attachmentHandlers/index.js.map +1 -1
  32. package/lib/module/translation/resources/i18n.js +9 -0
  33. package/lib/module/translation/resources/i18n.js.map +1 -1
  34. package/lib/module/utils/device.js +32 -0
  35. package/lib/module/utils/device.js.map +1 -1
  36. package/lib/module/utils/imageUtils.js +44 -28
  37. package/lib/module/utils/imageUtils.js.map +1 -1
  38. package/lib/typescript/src/assets/images/index.d.ts +5 -0
  39. package/lib/typescript/src/assets/images/index.d.ts.map +1 -1
  40. package/lib/typescript/src/components/AttachmentPreview/FilePreview.d.ts +6 -0
  41. package/lib/typescript/src/components/AttachmentPreview/FilePreview.d.ts.map +1 -0
  42. package/lib/typescript/src/components/AttachmentPreview/MediaPreview.d.ts +9 -0
  43. package/lib/typescript/src/components/AttachmentPreview/MediaPreview.d.ts.map +1 -0
  44. package/lib/typescript/src/components/AttachmentPreview/index.d.ts +9 -0
  45. package/lib/typescript/src/components/AttachmentPreview/index.d.ts.map +1 -0
  46. package/lib/typescript/src/components/messages/fileMessage/index.d.ts.map +1 -1
  47. package/lib/typescript/src/hooks/useFileAttachment.d.ts +20 -0
  48. package/lib/typescript/src/hooks/useFileAttachment.d.ts.map +1 -0
  49. package/lib/typescript/src/hooks/useFileDownload.d.ts +15 -0
  50. package/lib/typescript/src/hooks/useFileDownload.d.ts.map +1 -0
  51. package/lib/typescript/src/hooks/useImageAttachment.d.ts +1 -2
  52. package/lib/typescript/src/hooks/useImageAttachment.d.ts.map +1 -1
  53. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
  54. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentMapping.d.ts +10 -0
  55. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentMapping.d.ts.map +1 -0
  56. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentSendHandler.d.ts +4 -1
  57. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentSendHandler.d.ts.map +1 -1
  58. package/lib/typescript/src/services/attachmentHandlers/fileAttachmentHandler.d.ts +2 -2
  59. package/lib/typescript/src/services/attachmentHandlers/fileAttachmentHandler.d.ts.map +1 -1
  60. package/lib/typescript/src/services/attachmentHandlers/index.d.ts +1 -1
  61. package/lib/typescript/src/services/attachmentHandlers/index.d.ts.map +1 -1
  62. package/lib/typescript/src/translation/resources/i18n.d.ts.map +1 -1
  63. package/lib/typescript/src/types/attachment.d.ts +22 -1
  64. package/lib/typescript/src/types/attachment.d.ts.map +1 -1
  65. package/lib/typescript/src/utils/device.d.ts +7 -0
  66. package/lib/typescript/src/utils/device.d.ts.map +1 -1
  67. package/lib/typescript/src/utils/imageUtils.d.ts +1 -0
  68. package/lib/typescript/src/utils/imageUtils.d.ts.map +1 -1
  69. package/package.json +5 -1
  70. package/src/assets/images/icon_excel.png +0 -0
  71. package/src/assets/images/icon_img.png +0 -0
  72. package/src/assets/images/icon_pdf.png +0 -0
  73. package/src/assets/images/icon_txt.png +0 -0
  74. package/src/assets/images/icon_word.png +0 -0
  75. package/src/assets/images/index.ts +5 -0
  76. package/src/components/AttachmentPreview/FilePreview.tsx +137 -0
  77. package/src/components/AttachmentPreview/MediaPreview.tsx +238 -0
  78. package/src/components/AttachmentPreview/index.tsx +68 -0
  79. package/src/components/messages/fileMessage/index.tsx +156 -13
  80. package/src/hooks/useFileAttachment.ts +163 -0
  81. package/src/hooks/useFileDownload.ts +200 -0
  82. package/src/hooks/useImageAttachment.ts +1 -1
  83. package/src/screens/chat-detail/ChatComposer.tsx +61 -30
  84. package/src/screens/chat-detail/hooks/useAttachmentMapping.ts +58 -0
  85. package/src/screens/chat-detail/hooks/useAttachmentSendHandler.ts +50 -11
  86. package/src/services/attachmentHandlers/fileAttachmentHandler.ts +8 -7
  87. package/src/services/attachmentHandlers/index.ts +4 -1
  88. package/src/translation/resources/i18n.ts +9 -0
  89. package/src/types/attachment.ts +23 -1
  90. package/src/utils/device.ts +58 -0
  91. package/src/utils/imageUtils.ts +50 -28
  92. package/lib/module/components/AttachmentPreview.js +0 -252
  93. package/lib/module/components/AttachmentPreview.js.map +0 -1
  94. package/lib/typescript/src/components/AttachmentPreview.d.ts +0 -28
  95. package/lib/typescript/src/components/AttachmentPreview.d.ts.map +0 -1
  96. package/src/components/AttachmentPreview.tsx +0 -310
@@ -2,6 +2,11 @@
2
2
 
3
3
  const Images = {
4
4
  ICON_BOT: require('./icon_bot.png'),
5
+ ICON_EXCEL: require('./icon_excel.png'),
6
+ ICON_IMG: require('./icon_img.png'),
7
+ ICON_PDF: require('./icon_pdf.png'),
8
+ ICON_TXT: require('./icon_txt.png'),
9
+ ICON_WORD: require('./icon_word.png'),
5
10
  TAG_BOT: require('./tag_bot.png'),
6
11
  TAG_MALL: require('./tag_mall.png'),
7
12
  ICON_DROPPII: require('./icon_droppii.png')
@@ -1 +1 @@
1
- {"version":3,"names":["Images","ICON_BOT","require","TAG_BOT","TAG_MALL","ICON_DROPPII"],"sourceRoot":"../../../../src","sources":["assets/images/index.ts"],"mappings":";;AAAA,MAAMA,MAAM,GAAG;EACbC,QAAQ,EAAEC,OAAO,CAAC,gBAAgB,CAAC;EACnCC,OAAO,EAAED,OAAO,CAAC,eAAe,CAAC;EACjCE,QAAQ,EAAEF,OAAO,CAAC,gBAAgB,CAAC;EACnCG,YAAY,EAAEH,OAAO,CAAC,oBAAoB;AAC5C,CAAC;AAED,eAAeF,MAAM","ignoreList":[]}
1
+ {"version":3,"names":["Images","ICON_BOT","require","ICON_EXCEL","ICON_IMG","ICON_PDF","ICON_TXT","ICON_WORD","TAG_BOT","TAG_MALL","ICON_DROPPII"],"sourceRoot":"../../../../src","sources":["assets/images/index.ts"],"mappings":";;AAAA,MAAMA,MAAM,GAAG;EACbC,QAAQ,EAAEC,OAAO,CAAC,gBAAgB,CAAC;EACnCC,UAAU,EAAED,OAAO,CAAC,kBAAkB,CAAC;EACvCE,QAAQ,EAAEF,OAAO,CAAC,gBAAgB,CAAC;EACnCG,QAAQ,EAAEH,OAAO,CAAC,gBAAgB,CAAC;EACnCI,QAAQ,EAAEJ,OAAO,CAAC,gBAAgB,CAAC;EACnCK,SAAS,EAAEL,OAAO,CAAC,iBAAiB,CAAC;EACrCM,OAAO,EAAEN,OAAO,CAAC,eAAe,CAAC;EACjCO,QAAQ,EAAEP,OAAO,CAAC,gBAAgB,CAAC;EACnCQ,YAAY,EAAER,OAAO,CAAC,oBAAoB;AAC5C,CAAC;AAED,eAAeF,MAAM","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback } from 'react';
4
+ import { ActivityIndicator, StyleSheet } from 'react-native';
5
+ import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
6
+ import FileViewer from 'react-native-file-viewer';
7
+ import UIUtils from "../../utils/ui.js";
8
+ import { trans } from "../../translation/index.js";
9
+ import { formatFileSize, getFileIcon } from "../../utils/imageUtils.js";
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ export const FilePreview = /*#__PURE__*/memo(({
12
+ file,
13
+ onRemove
14
+ }) => {
15
+ const handlePress = useCallback(async () => {
16
+ if (file.isUploading || file.error) return;
17
+ try {
18
+ const path = file.metadata.uri?.startsWith('file://') ? file.metadata.uri.slice(7) : file.metadata.uri;
19
+ await FileViewer.open(path ?? '', {
20
+ showOpenWithDialog: true,
21
+ showAppsSuggestions: true
22
+ });
23
+ } catch {
24
+ UIUtils.toast.open({
25
+ title: trans('chat:file_preview_unsupported'),
26
+ theme: 'warning'
27
+ });
28
+ }
29
+ }, [file]);
30
+ const handleRemove = useCallback(() => {
31
+ onRemove(file.metadata.id ?? '');
32
+ }, [file.metadata?.id, onRemove]);
33
+ const iconSource = getFileIcon(file.metadata.mimeType);
34
+ const hasError = !!file.error;
35
+ return /*#__PURE__*/_jsxs(KContainer.Touchable, {
36
+ row: true,
37
+ alignItems: true,
38
+ width: 160,
39
+ onPress: handlePress,
40
+ br: "3x",
41
+ background: !hasError ? KColors.hexToRgba(KColors.palette.gray.w400, 0.1) : KColors.hexToRgba(KColors.danger.light, 0.2),
42
+ paddingL: '0.5rem',
43
+ paddingR: '1rem',
44
+ paddingV: '0.25rem',
45
+ children: [/*#__PURE__*/_jsx(KContainer.VisibleView, {
46
+ visible: file.isUploading,
47
+ children: /*#__PURE__*/_jsx(ActivityIndicator, {
48
+ size: "small",
49
+ color: KColors.palette.primary.w400,
50
+ style: styles.loader
51
+ })
52
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
53
+ visible: !file.isUploading,
54
+ children: /*#__PURE__*/_jsx(KImage.Base, {
55
+ uri: iconSource,
56
+ style: styles.icon,
57
+ resizeMode: "contain"
58
+ })
59
+ }), /*#__PURE__*/_jsxs(KContainer.View, {
60
+ flex: true,
61
+ children: [/*#__PURE__*/_jsx(KLabel.Text, {
62
+ typo: "TextSmMedium",
63
+ color: KColors.gray.dark,
64
+ numberOfLines: 1,
65
+ ellipsizeMode: "middle",
66
+ children: file.metadata.filename
67
+ }), /*#__PURE__*/_jsx(KLabel.Text, {
68
+ typo: "TextXsNormal",
69
+ color: KColors.palette.gray.w500,
70
+ numberOfLines: 1,
71
+ children: hasError ? file.error : file.isUploading ? `${file.uploadProgress}%` : formatFileSize(file.metadata.size ?? 0)
72
+ })]
73
+ }), /*#__PURE__*/_jsx(KContainer.Touchable, {
74
+ onPress: handleRemove,
75
+ center: true,
76
+ width: 20,
77
+ height: 20,
78
+ br: 'round',
79
+ background: KColors.gray.dark,
80
+ hitSlop: 8,
81
+ style: styles.removeBtn,
82
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
83
+ name: "close",
84
+ provider: "MaterialCommunityIcons",
85
+ size: 18,
86
+ color: KColors.white
87
+ })
88
+ })]
89
+ });
90
+ });
91
+ FilePreview.displayName = 'FilePreview';
92
+ const styles = StyleSheet.create({
93
+ icon: {
94
+ width: 20,
95
+ height: 20,
96
+ marginRight: 7
97
+ },
98
+ loader: {
99
+ marginRight: 8
100
+ },
101
+ removeBtn: {
102
+ position: 'absolute',
103
+ right: -4,
104
+ top: -4
105
+ }
106
+ });
107
+ //# sourceMappingURL=FilePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","ActivityIndicator","StyleSheet","KContainer","KImage","KLabel","KColors","FileViewer","UIUtils","trans","formatFileSize","getFileIcon","jsx","_jsx","jsxs","_jsxs","FilePreview","file","onRemove","handlePress","isUploading","error","path","metadata","uri","startsWith","slice","open","showOpenWithDialog","showAppsSuggestions","toast","title","theme","handleRemove","id","iconSource","mimeType","hasError","Touchable","row","alignItems","width","onPress","br","background","hexToRgba","palette","gray","w400","danger","light","paddingL","paddingR","paddingV","children","VisibleView","visible","size","color","primary","style","styles","loader","Base","icon","resizeMode","View","flex","Text","typo","dark","numberOfLines","ellipsizeMode","filename","w500","uploadProgress","center","height","hitSlop","removeBtn","VectorIcons","name","provider","white","displayName","create","marginRight","position","right","top"],"sourceRoot":"../../../../src","sources":["components/AttachmentPreview/FilePreview.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { KColors, KContainer, KImage, KLabel } from '@droppii/libs';
5
+ import { StyleSheet } from 'react-native';
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ const formatDuration = seconds => {
8
+ const totalSecs = Math.floor(seconds);
9
+ const mins = Math.floor(totalSecs / 60);
10
+ const secs = totalSecs % 60;
11
+ return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
12
+ };
13
+ const getAttachmentIcon = type => {
14
+ switch (type) {
15
+ case 'image':
16
+ return 'image';
17
+ case 'video':
18
+ return 'play-circle';
19
+ case 'audio':
20
+ return 'music';
21
+ case 'document':
22
+ return 'file-document';
23
+ case 'file':
24
+ default:
25
+ return 'file';
26
+ }
27
+ };
28
+ export const MediaPreview = /*#__PURE__*/memo(({
29
+ item,
30
+ index,
31
+ onRemove
32
+ }) => {
33
+ const {
34
+ type,
35
+ metadata,
36
+ uploadProgress,
37
+ error,
38
+ isUploading,
39
+ thumbnailUrl
40
+ } = item;
41
+ const isImage = type === 'image';
42
+ const isVideo = type === 'video';
43
+ const hasPreview = isImage || isVideo;
44
+ return /*#__PURE__*/_jsxs(KContainer.View, {
45
+ children: [/*#__PURE__*/_jsxs(KContainer.View, {
46
+ style: styles.thumbnail,
47
+ center: true,
48
+ children: [isVideo && thumbnailUrl && /*#__PURE__*/_jsx(KImage.Base, {
49
+ uri: thumbnailUrl,
50
+ width: 48,
51
+ height: 48,
52
+ resizeMode: "cover"
53
+ }), isVideo && !thumbnailUrl && /*#__PURE__*/_jsx(KContainer.View, {
54
+ style: [styles.videoBg, styles.videoThumbnail]
55
+ }), isImage && /*#__PURE__*/_jsx(KImage.Base, {
56
+ uri: `file://${metadata.path}`,
57
+ width: 48,
58
+ height: 48
59
+ }), !hasPreview && /*#__PURE__*/_jsx(KContainer.View, {
60
+ style: styles.iconOverlay,
61
+ center: true,
62
+ background: KColors.palette.gray.w100,
63
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
64
+ name: getAttachmentIcon(type),
65
+ provider: "MaterialCommunityIcons",
66
+ size: 24,
67
+ color: KColors.palette.primary.w400
68
+ })
69
+ }), isVideo && !!metadata.duration && /*#__PURE__*/_jsx(KContainer.View, {
70
+ style: styles.durationBadge,
71
+ center: true,
72
+ children: /*#__PURE__*/_jsx(KLabel.Text, {
73
+ typo: "TextXsNormal",
74
+ color: KColors.white,
75
+ style: styles.durationText,
76
+ children: formatDuration(metadata.duration / 1000)
77
+ })
78
+ }), !hasPreview && /*#__PURE__*/_jsx(KContainer.View, {
79
+ style: styles.typeIcon,
80
+ center: true,
81
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
82
+ name: getAttachmentIcon(type),
83
+ provider: "MaterialCommunityIcons",
84
+ size: 14,
85
+ color: KColors.white
86
+ })
87
+ }), error && /*#__PURE__*/_jsx(KContainer.View, {
88
+ style: styles.errorOverlay,
89
+ center: true,
90
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
91
+ name: "close-circle",
92
+ provider: "MaterialCommunityIcons",
93
+ size: 28,
94
+ color: KColors.white
95
+ })
96
+ }), isUploading && /*#__PURE__*/_jsx(KContainer.View, {
97
+ style: styles.progressOverlay,
98
+ center: true,
99
+ children: /*#__PURE__*/_jsxs(KLabel.Text, {
100
+ typo: "TextSmNormal",
101
+ color: KColors.white,
102
+ children: [uploadProgress, "%"]
103
+ })
104
+ })]
105
+ }), /*#__PURE__*/_jsx(KContainer.Touchable, {
106
+ style: styles.removeButton,
107
+ center: true,
108
+ br: "round",
109
+ background: KColors.black,
110
+ onPress: () => onRemove(type, index),
111
+ disabled: isUploading,
112
+ hitSlop: 10,
113
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
114
+ name: "close",
115
+ provider: "MaterialCommunityIcons",
116
+ size: 18,
117
+ color: KColors.white
118
+ })
119
+ })]
120
+ });
121
+ });
122
+ MediaPreview.displayName = 'MediaPreview';
123
+ const styles = StyleSheet.create({
124
+ thumbnail: {
125
+ position: 'relative',
126
+ width: 48,
127
+ height: 48,
128
+ borderRadius: 4,
129
+ overflow: 'hidden',
130
+ backgroundColor: KColors.palette.gray.w50
131
+ },
132
+ durationBadge: {
133
+ position: 'absolute',
134
+ bottom: 4,
135
+ right: 4,
136
+ backgroundColor: 'rgba(0, 0, 0, 0.8)',
137
+ borderRadius: 3,
138
+ paddingVertical: 2,
139
+ paddingHorizontal: 4
140
+ },
141
+ durationText: {
142
+ fontSize: 11,
143
+ fontWeight: '600'
144
+ },
145
+ iconOverlay: {
146
+ width: 48,
147
+ height: 48,
148
+ borderRadius: 4
149
+ },
150
+ videoIcon: {
151
+ position: 'absolute',
152
+ top: 2,
153
+ right: 2,
154
+ backgroundColor: 'rgba(0, 0, 0, 0.6)',
155
+ borderRadius: 8,
156
+ width: 20,
157
+ height: 20
158
+ },
159
+ typeIcon: {
160
+ position: 'absolute',
161
+ bottom: 2,
162
+ right: 2,
163
+ backgroundColor: 'rgba(0, 0, 0, 0.7)',
164
+ borderRadius: 6,
165
+ width: 16,
166
+ height: 16
167
+ },
168
+ videoBg: {
169
+ width: 48,
170
+ height: 48,
171
+ borderRadius: 4
172
+ },
173
+ videoThumbnail: {
174
+ backgroundColor: KColors.black
175
+ },
176
+ progressOverlay: {
177
+ position: 'absolute',
178
+ top: 0,
179
+ left: 0,
180
+ right: 0,
181
+ bottom: 0,
182
+ backgroundColor: 'rgba(0, 0, 0, 0.6)'
183
+ },
184
+ errorOverlay: {
185
+ position: 'absolute',
186
+ top: 0,
187
+ left: 0,
188
+ right: 0,
189
+ bottom: 0,
190
+ backgroundColor: 'rgba(255, 59, 48, 0.8)'
191
+ },
192
+ removeButton: {
193
+ position: 'absolute',
194
+ right: -4,
195
+ top: -4,
196
+ width: 22,
197
+ height: 22,
198
+ shadowColor: '#000',
199
+ shadowOffset: {
200
+ width: 0,
201
+ height: 1
202
+ },
203
+ shadowOpacity: 0.2,
204
+ shadowRadius: 2,
205
+ elevation: 3
206
+ },
207
+ sendButton: {
208
+ width: 48,
209
+ height: 48
210
+ }
211
+ });
212
+ //# sourceMappingURL=MediaPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","KColors","KContainer","KImage","KLabel","StyleSheet","jsx","_jsx","jsxs","_jsxs","formatDuration","seconds","totalSecs","Math","floor","mins","secs","toString","padStart","getAttachmentIcon","type","MediaPreview","item","index","onRemove","metadata","uploadProgress","error","isUploading","thumbnailUrl","isImage","isVideo","hasPreview","View","children","style","styles","thumbnail","center","Base","uri","width","height","resizeMode","videoBg","videoThumbnail","path","iconOverlay","background","palette","gray","w100","VectorIcons","name","provider","size","color","primary","w400","duration","durationBadge","Text","typo","white","durationText","typeIcon","errorOverlay","progressOverlay","Touchable","removeButton","br","black","onPress","disabled","hitSlop","displayName","create","position","borderRadius","overflow","backgroundColor","w50","bottom","right","paddingVertical","paddingHorizontal","fontSize","fontWeight","videoIcon","top","left","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation","sendButton"],"sourceRoot":"../../../../src","sources":["components/AttachmentPreview/MediaPreview.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback } from 'react';
4
+ import { ScrollView, StyleSheet } from 'react-native';
5
+ import { MediaPreview } from "./MediaPreview.js";
6
+ import { FilePreview } from "./FilePreview.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ export const AttachmentPreview = /*#__PURE__*/memo(({
9
+ visible,
10
+ attachments,
11
+ onRemove
12
+ }) => {
13
+ const onFileRemove = useCallback(id => {
14
+ onRemove('file', id);
15
+ }, [onRemove]);
16
+ if (!visible || !attachments?.length) {
17
+ return null;
18
+ }
19
+ return /*#__PURE__*/_jsx(ScrollView, {
20
+ horizontal: true,
21
+ showsHorizontalScrollIndicator: false,
22
+ scrollEventThrottle: 16,
23
+ contentContainerStyle: styles.scrollContent,
24
+ children: attachments?.map((item, index) => {
25
+ switch (item.type) {
26
+ case 'file':
27
+ return /*#__PURE__*/_jsx(FilePreview, {
28
+ file: item,
29
+ onRemove: onFileRemove
30
+ }, `${item.type}-${index}`);
31
+ default:
32
+ return /*#__PURE__*/_jsx(MediaPreview, {
33
+ index: index,
34
+ item: item,
35
+ onRemove: onRemove
36
+ }, `${item.type}-${index}`);
37
+ }
38
+ })
39
+ });
40
+ });
41
+ AttachmentPreview.displayName = 'AttachmentPreview';
42
+ const styles = StyleSheet.create({
43
+ scrollContent: {
44
+ padding: 8,
45
+ paddingTop: 12,
46
+ gap: 8
47
+ }
48
+ });
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","ScrollView","StyleSheet","MediaPreview","FilePreview","jsx","_jsx","AttachmentPreview","visible","attachments","onRemove","onFileRemove","id","length","horizontal","showsHorizontalScrollIndicator","scrollEventThrottle","contentContainerStyle","styles","scrollContent","children","map","item","index","type","file","displayName","create","padding","paddingTop","gap"],"sourceRoot":"../../../../src","sources":["components/AttachmentPreview/index.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,WAAW,QAAQ,OAAO;AACzC,SAASC,UAAU,EAAEC,UAAU,QAAQ,cAAc;AAErD,SAASC,YAAY,QAAQ,mBAAgB;AAC7C,SAASC,WAAW,QAAQ,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ5C,OAAO,MAAMC,iBAAiB,gBAAGR,IAAI,CACnC,CAAC;EAAES,OAAO;EAAEC,WAAW;EAAEC;AAAiC,CAAC,KAAK;EAC9D,MAAMC,YAAY,GAAGX,WAAW,CAC7BY,EAAU,IAAK;IACdF,QAAQ,CAAC,MAAM,EAAEE,EAAE,CAAC;EACtB,CAAC,EACD,CAACF,QAAQ,CACX,CAAC;EAED,IAAI,CAACF,OAAO,IAAI,CAACC,WAAW,EAAEI,MAAM,EAAE;IACpC,OAAO,IAAI;EACb;EAEA,oBACEP,IAAA,CAACL,UAAU;IACTa,UAAU;IACVC,8BAA8B,EAAE,KAAM;IACtCC,mBAAmB,EAAE,EAAG;IACxBC,qBAAqB,EAAEC,MAAM,CAACC,aAAc;IAAAC,QAAA,EAE3CX,WAAW,EAAEY,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;MACjC,QAAQD,IAAI,CAACE,IAAI;QACf,KAAK,MAAM;UACT,oBACElB,IAAA,CAACF,WAAW;YAEVqB,IAAI,EAAEH,IAAK;YACXZ,QAAQ,EAAEC;UAAa,GAFlB,GAAGW,IAAI,CAACE,IAAI,IAAID,KAAK,EAG3B,CAAC;QAGN;UACE,oBACEjB,IAAA,CAACH,YAAY;YAEXoB,KAAK,EAAEA,KAAM;YACbD,IAAI,EAAEA,IAAK;YACXZ,QAAQ,EAAEA;UAAS,GAHd,GAAGY,IAAI,CAACE,IAAI,IAAID,KAAK,EAI3B,CAAC;MAER;IACF,CAAC;EAAC,CACQ,CAAC;AAEjB,CACF,CAAC;AAEDhB,iBAAiB,CAACmB,WAAW,GAAG,mBAAmB;AAEnD,MAAMR,MAAM,GAAGhB,UAAU,CAACyB,MAAM,CAAC;EAC/BR,aAAa,EAAE;IACbS,OAAO,EAAE,CAAC;IACVC,UAAU,EAAE,EAAE;IACdC,GAAG,EAAE;EACP;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,26 +1,136 @@
1
1
  "use strict";
2
2
 
3
- import { memo } from 'react';
4
- import { KContainer, KLabel } from '@droppii/libs';
3
+ import { memo, useMemo } from 'react';
4
+ import { StyleSheet } from 'react-native';
5
+ import { KContainer, KImage, KLabel, KColors } from '@droppii/libs';
5
6
  import { CHAT_BUBBLE_COLORS } from "../../../screens/chat-detail/constants.js";
6
7
  import { messageStyles } from "../styles.js";
7
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
8
+ import { useFileDownload } from "../../../hooks/useFileDownload.js";
9
+ import { getFileIcon, getMimeType, formatFileSize } from "../../../utils/imageUtils.js";
10
+ import { trans } from "../../../translation/index.js";
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
12
  export const FileMessage = /*#__PURE__*/memo(({
9
13
  message,
10
14
  isOutgoing
11
15
  }) => {
12
- const fileName = message.fileElem?.fileName || message.content || '[File]';
16
+ const fileName = message.fileElem?.fileName || '[File]';
17
+ const fileSize = message.fileElem?.fileSize ?? 0;
18
+ const url = message.fileElem?.sourceUrl || message.fileElem?.url || '';
19
+ const {
20
+ state,
21
+ handleView,
22
+ handleDownload
23
+ } = useFileDownload(fileName, url);
24
+ const mimeType = useMemo(() => getMimeType(fileName), [fileName]);
25
+ const iconSource = useMemo(() => getFileIcon(mimeType), [mimeType]);
26
+ const subtitle = useMemo(() => {
27
+ if (state.status === 'downloading') {
28
+ return trans('chat:file_downloading', {
29
+ received: state.receivedMB ?? 0,
30
+ total: state.totalMB ?? 0
31
+ });
32
+ }
33
+ if (state.status === 'error') {
34
+ return state.error ?? trans('chat:file_download_failed');
35
+ }
36
+ return formatFileSize(fileSize);
37
+ }, [state, fileSize]);
38
+ const subtitleColor = state.status === 'error' ? KColors.palette.danger?.w400 ?? '#FF3B30' : KColors.palette.gray.w500;
39
+ const isDownloading = state.status === 'downloading';
13
40
  return /*#__PURE__*/_jsx(KContainer.View, {
14
- style: messageStyles.wrapper,
15
- children: /*#__PURE__*/_jsx(KContainer.View, {
16
- style: [messageStyles.bubble, isOutgoing ? messageStyles.bubbleSent : messageStyles.bubbleReceived],
17
- children: /*#__PURE__*/_jsxs(KLabel.Text, {
18
- typo: "TextSmNormal",
19
- color: CHAT_BUBBLE_COLORS.text,
20
- children: ["\uD83D\uDCCE ", fileName]
21
- })
41
+ padding: '0.5rem',
42
+ style: [styles.wrapper, messageStyles.wrapper, isOutgoing ? messageStyles.bubbleSent : messageStyles.bubbleReceived],
43
+ children: /*#__PURE__*/_jsxs(KContainer.View, {
44
+ row: true,
45
+ alignItems: true,
46
+ br: '3x',
47
+ paddingR: '0.75rem',
48
+ paddingV: '0.25rem',
49
+ background: KColors.white,
50
+ children: [/*#__PURE__*/_jsx(KContainer.VisibleView, {
51
+ visible: isDownloading,
52
+ children: /*#__PURE__*/_jsx(KContainer.Touchable, {
53
+ center: true,
54
+ br: "round",
55
+ style: styles.cancelBtn,
56
+ width: 32,
57
+ height: 32,
58
+ onPress: handleDownload,
59
+ children: /*#__PURE__*/_jsx(KContainer.View, {
60
+ center: true,
61
+ br: "round",
62
+ style: styles.cancelBtnIconContainer,
63
+ width: 26,
64
+ height: 26,
65
+ children: /*#__PURE__*/_jsx(KImage.VectorIcons, {
66
+ name: "close",
67
+ provider: "MaterialCommunityIcons",
68
+ size: 24,
69
+ color: KColors.white
70
+ })
71
+ })
72
+ })
73
+ }), /*#__PURE__*/_jsx(KContainer.VisibleView, {
74
+ visible: !isDownloading,
75
+ children: /*#__PURE__*/_jsx(KImage.Base, {
76
+ uri: iconSource,
77
+ style: styles.fileIcon,
78
+ resizeMode: "contain"
79
+ })
80
+ }), /*#__PURE__*/_jsxs(KContainer.View, {
81
+ flexS: 1,
82
+ children: [/*#__PURE__*/_jsx(KLabel.Text, {
83
+ typo: "TextSmMedium",
84
+ color: CHAT_BUBBLE_COLORS.text,
85
+ numberOfLines: 1,
86
+ ellipsizeMode: "middle",
87
+ children: fileName
88
+ }), /*#__PURE__*/_jsx(KLabel.Text, {
89
+ typo: "TextXsNormal",
90
+ color: subtitleColor,
91
+ numberOfLines: 1,
92
+ children: subtitle
93
+ })]
94
+ }), /*#__PURE__*/_jsx(KImage.VectorIcons, {
95
+ name: "eye-outline",
96
+ provider: "MaterialCommunityIcons",
97
+ onPress: handleView,
98
+ size: 20,
99
+ color: KColors.palette.gray.w600,
100
+ containerStyle: styles.viewIcon
101
+ }), /*#__PURE__*/_jsx(KImage.VectorIcons, {
102
+ name: 'download-o',
103
+ provider: "DroppiiNew",
104
+ onPress: isDownloading ? undefined : handleDownload,
105
+ size: 20,
106
+ color: state.status === 'error' ? KColors.palette.danger?.w400 ?? '#FF3B30' : KColors.palette.gray.w600,
107
+ containerStyle: isDownloading ? styles.disabledIcon : undefined
108
+ })]
22
109
  })
23
110
  });
24
111
  });
25
112
  FileMessage.displayName = 'FileMessage';
113
+ const styles = StyleSheet.create({
114
+ wrapper: {
115
+ borderRadius: 20
116
+ },
117
+ fileIcon: {
118
+ width: 24,
119
+ height: 24,
120
+ marginHorizontal: 12
121
+ },
122
+ cancelBtn: {
123
+ backgroundColor: KColors.hexToRgba('#6355CA', 0.3),
124
+ marginHorizontal: 6
125
+ },
126
+ cancelBtnIconContainer: {
127
+ backgroundColor: '#6355CA'
128
+ },
129
+ viewIcon: {
130
+ marginHorizontal: 12
131
+ },
132
+ disabledIcon: {
133
+ opacity: 0.3
134
+ }
135
+ });
26
136
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["memo","KContainer","KLabel","CHAT_BUBBLE_COLORS","messageStyles","jsxs","_jsxs","jsx","_jsx","FileMessage","message","isOutgoing","fileName","fileElem","content","View","style","wrapper","children","bubble","bubbleSent","bubbleReceived","Text","typo","color","text","displayName"],"sourceRoot":"../../../../../src","sources":["components/messages/fileMessage/index.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,UAAU,EAAEC,MAAM,QAAQ,eAAe;AAClD,SAASC,kBAAkB,QAAQ,2CAAwC;AAC3E,SAASC,aAAa,QAAQ,cAAW;AAAC,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA;AAG1C,OAAO,MAAMC,WAAW,gBAAGT,IAAI,CAC7B,CAAC;EAAEU,OAAO;EAAEC;AAAmC,CAAC,KAAK;EACnD,MAAMC,QAAQ,GAAGF,OAAO,CAACG,QAAQ,EAAED,QAAQ,IAAIF,OAAO,CAACI,OAAO,IAAI,QAAQ;EAE1E,oBACEN,IAAA,CAACP,UAAU,CAACc,IAAI;IAACC,KAAK,EAAEZ,aAAa,CAACa,OAAQ;IAAAC,QAAA,eAC5CV,IAAA,CAACP,UAAU,CAACc,IAAI;MACdC,KAAK,EAAE,CACLZ,aAAa,CAACe,MAAM,EACpBR,UAAU,GACNP,aAAa,CAACgB,UAAU,GACxBhB,aAAa,CAACiB,cAAc,CAChC;MAAAH,QAAA,eAEFZ,KAAA,CAACJ,MAAM,CAACoB,IAAI;QAACC,IAAI,EAAC,cAAc;QAACC,KAAK,EAAErB,kBAAkB,CAACsB,IAAK;QAAAP,QAAA,GAAC,eAC5D,EAACN,QAAQ;MAAA,CACD;IAAC,CACC;EAAC,CACH,CAAC;AAEtB,CACF,CAAC;AAEDH,WAAW,CAACiB,WAAW,GAAG,aAAa","ignoreList":[]}
1
+ {"version":3,"names":["memo","useMemo","StyleSheet","KContainer","KImage","KLabel","KColors","CHAT_BUBBLE_COLORS","messageStyles","useFileDownload","getFileIcon","getMimeType","formatFileSize","trans","jsx","_jsx","jsxs","_jsxs","FileMessage","message","isOutgoing","fileName","fileElem","fileSize","url","sourceUrl","state","handleView","handleDownload","mimeType","iconSource","subtitle","status","received","receivedMB","total","totalMB","error","subtitleColor","palette","danger","w400","gray","w500","isDownloading","View","padding","style","styles","wrapper","bubbleSent","bubbleReceived","children","row","alignItems","br","paddingR","paddingV","background","white","VisibleView","visible","Touchable","center","cancelBtn","width","height","onPress","cancelBtnIconContainer","VectorIcons","name","provider","size","color","Base","uri","fileIcon","resizeMode","flexS","Text","typo","text","numberOfLines","ellipsizeMode","w600","containerStyle","viewIcon","undefined","disabledIcon","displayName","create","borderRadius","marginHorizontal","backgroundColor","hexToRgba","opacity"],"sourceRoot":"../../../../../src","sources":["components/messages/fileMessage/index.tsx"],"mappings":"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","ignoreList":[]}