stream-chat-react-native-core 4.5.1-beta.1 → 4.6.0-beta.1

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 (83) hide show
  1. package/lib/commonjs/components/Attachment/FileIcon.js +9 -1
  2. package/lib/commonjs/components/Attachment/FileIcon.js.map +1 -1
  3. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +208 -31
  4. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  5. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +39 -21
  6. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  7. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +1 -1
  8. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  9. package/lib/commonjs/components/MessageInput/MessageInput.js +129 -44
  10. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  11. package/lib/commonjs/components/Reply/Reply.js +25 -9
  12. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  13. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js +15 -8
  14. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  15. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +10 -7
  16. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  17. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +16 -1
  18. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  19. package/lib/commonjs/contexts/themeContext/utils/theme.js +1 -0
  20. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  21. package/lib/commonjs/icons/Recorder.js +47 -0
  22. package/lib/commonjs/icons/Recorder.js.map +1 -0
  23. package/lib/commonjs/icons/Video.js +82 -0
  24. package/lib/commonjs/icons/Video.js.map +1 -0
  25. package/lib/commonjs/icons/index.js +26 -0
  26. package/lib/commonjs/icons/index.js.map +1 -1
  27. package/lib/commonjs/native.js.map +1 -1
  28. package/lib/commonjs/version.json +1 -1
  29. package/lib/module/components/Attachment/FileIcon.js +9 -1
  30. package/lib/module/components/Attachment/FileIcon.js.map +1 -1
  31. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +208 -31
  32. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  33. package/lib/module/components/Message/MessageSimple/MessageContent.js +39 -21
  34. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  35. package/lib/module/components/MessageInput/FileUploadPreview.js +1 -1
  36. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  37. package/lib/module/components/MessageInput/MessageInput.js +129 -44
  38. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  39. package/lib/module/components/Reply/Reply.js +25 -9
  40. package/lib/module/components/Reply/Reply.js.map +1 -1
  41. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js +15 -8
  42. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  43. package/lib/module/contexts/messageInputContext/MessageInputContext.js +10 -7
  44. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  45. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +16 -1
  46. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  47. package/lib/module/contexts/themeContext/utils/theme.js +1 -0
  48. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  49. package/lib/module/icons/Recorder.js +47 -0
  50. package/lib/module/icons/Recorder.js.map +1 -0
  51. package/lib/module/icons/Video.js +82 -0
  52. package/lib/module/icons/Video.js.map +1 -0
  53. package/lib/module/icons/index.js +26 -0
  54. package/lib/module/icons/index.js.map +1 -1
  55. package/lib/module/native.js.map +1 -1
  56. package/lib/module/version.json +1 -1
  57. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  58. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +3 -2
  59. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +4 -15
  60. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +1 -0
  61. package/lib/typescript/icons/Recorder.d.ts +3 -0
  62. package/lib/typescript/icons/Video.d.ts +3 -0
  63. package/lib/typescript/icons/index.d.ts +2 -0
  64. package/lib/typescript/native.d.ts +3 -14
  65. package/lib/typescript/types/types.d.ts +24 -0
  66. package/package.json +1 -1
  67. package/src/components/Attachment/FileIcon.tsx +45 -0
  68. package/src/components/AttachmentPicker/AttachmentPicker.tsx +172 -22
  69. package/src/components/Message/MessageSimple/MessageContent.tsx +23 -12
  70. package/src/components/MessageInput/FileUploadPreview.tsx +1 -1
  71. package/src/components/MessageInput/MessageInput.tsx +106 -19
  72. package/src/components/Reply/Reply.tsx +31 -14
  73. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +12 -0
  74. package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +6 -2
  75. package/src/contexts/messageInputContext/MessageInputContext.tsx +17 -24
  76. package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +17 -1
  77. package/src/contexts/themeContext/utils/theme.ts +2 -0
  78. package/src/icons/Recorder.tsx +16 -0
  79. package/src/icons/Video.tsx +37 -0
  80. package/src/icons/index.ts +2 -0
  81. package/src/native.ts +4 -14
  82. package/src/types/types.ts +27 -0
  83. package/src/version.json +1 -1
@@ -43,6 +43,8 @@ var _TAR = require("../../icons/TAR");
43
43
 
44
44
  var _TXT = require("../../icons/TXT");
45
45
 
46
+ var _Video = require("../../icons/Video");
47
+
46
48
  var _XLS = require("../../icons/XLS");
47
49
 
48
50
  var _XLSX = require("../../icons/XLSX");
@@ -62,6 +64,7 @@ var powerpointMimeTypes = ['application/vnd.ms-powerpoint', 'application/vnd.oas
62
64
  var powerpointXMimeTypes = ['application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.openxmlformats-officedocument.presentationml.template', 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', 'application/vnd.ms-powerpoint.addin.macroEnabled.12', 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', 'application/vnd.ms-powerpoint.template.macroEnabled.12', 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12'];
63
65
  var tarFileTypes = ['application/x-archive', 'application/x-tar', 'application/gzip', 'application/x-compress', 'application/x-bzip', 'application/x-lzip', 'application/x-lz4', 'application/x-lzma', 'application/x-lzop', 'application/x-xz', 'application/x-webarchive'];
64
66
  var zipFileTypes = ['application/gzip', 'application/zip'];
67
+ var videoFileTypes = ['video/3g2', 'video/3gp', 'video/aaf', 'video/asf', 'video/avchd', 'video/avi', 'video/drc', 'video/flv', 'video/m2v', 'video/m3u8', 'video/m4p', 'video/m4v', 'video/mkv', 'video/mng', 'video/mov', 'video/mp2', 'video/mp4', 'video/mpe', 'video/mpeg', 'video/mpg', 'video/mpv', 'video/mxf', 'video/nsv', 'video/ogg', 'video/ogv', 'video/qt', 'video/rm', 'video/rmvb', 'video/roq', 'video/svi', 'video/vob', 'video/webm', 'video/wmv', 'video/yuv', 'video/quicktime', 'video/webm', 'video/x-flv'];
65
68
  var mimeTypeToIconMap = {
66
69
  'application/pdf': _PDF.PDF,
67
70
  'application/rtf': _RTF.RTF,
@@ -123,6 +126,11 @@ for (var _i10 = 0, _zipFileTypes = zipFileTypes; _i10 < _zipFileTypes.length; _i
123
126
  mimeTypeToIconMap[_type9] = _ZIP.ZIP;
124
127
  }
125
128
 
129
+ for (var _i11 = 0, _videoFileTypes = videoFileTypes; _i11 < _videoFileTypes.length; _i11++) {
130
+ var _type10 = _videoFileTypes[_i11];
131
+ mimeTypeToIconMap[_type10] = _Video.Video;
132
+ }
133
+
126
134
  function mimeTypeToIcon(mimeType) {
127
135
  if (!mimeType) return _GenericFile.GenericFile;
128
136
  var Icon = mimeTypeToIconMap[mimeType];
@@ -145,7 +153,7 @@ var FileIcon = function FileIcon(_ref) {
145
153
  __self: _this,
146
154
  __source: {
147
155
  fileName: _jsxFileName,
148
- lineNumber: 399,
156
+ lineNumber: 444,
149
157
  columnNumber: 10
150
158
  }
151
159
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["FileIcon.tsx"],"names":["audioFileTypes","docMimeTypes","docXMimeTypes","excelMimeTypes","excelXMimeTypes","odtMimeTypes","powerpointMimeTypes","powerpointXMimeTypes","tarFileTypes","zipFileTypes","mimeTypeToIconMap","PDF","RTF","RAR","SEVEN_Z","CSV","HTML","MD","TXT","type","Audio","DOC","DOCX","XLS","XLSX","ODT","PPT","PPTX","TAR","ZIP","mimeTypeToIcon","mimeType","GenericFile","Icon","FileIcon","size","icon","theme","messageSimple","file","height","width","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\n\nimport { Audio } from '../../icons/Audio';\nimport { CSV } from '../../icons/CSV';\nimport { DOC } from '../../icons/DOC';\nimport { DOCX } from '../../icons/DOCX';\nimport { GenericFile } from '../../icons/GenericFile';\nimport { HTML } from '../../icons/HTML';\nimport { MD } from '../../icons/MD';\nimport { ODT } from '../../icons/ODT';\nimport { PDF } from '../../icons/PDF';\nimport { PPT } from '../../icons/PPT';\nimport { PPTX } from '../../icons/PPTX';\nimport { RAR } from '../../icons/RAR';\nimport { RTF } from '../../icons/RTF';\nimport { SEVEN_Z } from '../../icons/SEVEN_Z';\nimport { TAR } from '../../icons/TAR';\nimport { TXT } from '../../icons/TXT';\nimport type { IconProps } from '../../icons/utils/base';\nimport { XLS } from '../../icons/XLS';\nimport { XLSX } from '../../icons/XLSX';\nimport { ZIP } from '../../icons/ZIP';\n\n// https://www.iana.org/assignments/media-types/media-types.xhtml#audio\nconst audioFileTypes = [\n 'audio/1d-interleaved-parityfec',\n 'audio/32kadpcm',\n 'audio/3gpp',\n 'audio/3gpp2',\n 'audio/aac',\n 'audio/ac3',\n 'audio/AMR',\n 'audio/AMR-WB',\n 'audio/amr-wb+',\n 'audio/aptx',\n 'audio/asc',\n 'audio/ATRAC-ADVANCED-LOSSLESS',\n 'audio/ATRAC-X',\n 'audio/ATRAC3',\n 'audio/basic',\n 'audio/BV16',\n 'audio/BV32',\n 'audio/clearmode',\n 'audio/CN',\n 'audio/DAT12',\n 'audio/dls',\n 'audio/dsr-es201108',\n 'audio/dsr-es202050',\n 'audio/dsr-es202211',\n 'audio/dsr-es202212',\n 'audio/DV',\n 'audio/DVI4',\n 'audio/eac3',\n 'audio/encaprtp',\n 'audio/EVRC',\n 'audio/EVRC-QCP',\n 'audio/EVRC0',\n 'audio/EVRC1',\n 'audio/EVRCB',\n 'audio/EVRCB0',\n 'audio/EVRCB1',\n 'audio/EVRCNW',\n 'audio/EVRCNW0',\n 'audio/EVRCNW1',\n 'audio/EVRCWB',\n 'audio/EVRCWB0',\n 'audio/EVRCWB1',\n 'audio/EVS',\n 'audio/example',\n 'audio/flexfec',\n 'audio/fwdred',\n 'audio/G711-0',\n 'audio/G719',\n 'audio/G7221',\n 'audio/G722',\n 'audio/G723',\n 'audio/G726-16',\n 'audio/G726-24',\n 'audio/G726-32',\n 'audio/G726-40',\n 'audio/G728',\n 'audio/G729',\n 'audio/G7291',\n 'audio/G729D',\n 'audio/G729E',\n 'audio/GSM',\n 'audio/GSM-EFR',\n 'audio/GSM-HR-08',\n 'audio/iLBC',\n 'audio/ip-mr_v2.5',\n 'audio/L8',\n 'audio/L16',\n 'audio/L20',\n 'audio/L24',\n 'audio/LPC',\n 'audio/MELP',\n 'audio/MELP600',\n 'audio/MELP1200',\n 'audio/MELP2400',\n 'audio/mhas',\n 'audio/mobile-xmf',\n 'audio/MPA',\n 'audio/mp4',\n 'audio/MP4A-LATM',\n 'audio/mpa-robust',\n 'audio/mpeg',\n 'audio/mpeg4-generic',\n 'audio/ogg',\n 'audio/opus',\n 'audio/parityfec',\n 'audio/PCMA',\n 'audio/PCMA-WB',\n 'audio/PCMU',\n 'audio/PCMU-WB',\n 'audio/prs.sid',\n 'audio/raptorfec',\n 'audio/RED',\n 'audio/rtp-enc-aescm128',\n 'audio/rtploopback',\n 'audio/rtp-midi',\n 'audio/rtx',\n 'audio/SMV',\n 'audio/SMV0',\n 'audio/SMV-QCP',\n 'audio/sofa',\n 'audio/sp-midi',\n 'audio/speex',\n 'audio/t140c',\n 'audio/t38',\n 'audio/telephone-event',\n 'audio/TETRA_ACELP',\n 'audio/TETRA_ACELP_BB',\n 'audio/tone',\n 'audio/TSVCIS',\n 'audio/UEMCLIP',\n 'audio/ulpfec',\n 'audio/usac',\n 'audio/VDVI',\n 'audio/VMR-WB',\n 'audio/vnd.3gpp.iufp',\n 'audio/vnd.4SB',\n 'audio/vnd.audiokoz',\n 'audio/vnd.CELP',\n 'audio/vnd.cisco.nse',\n 'audio/vnd.cmles.radio-events',\n 'audio/vnd.cns.anp1',\n 'audio/vnd.cns.inf1',\n 'audio/vnd.dece.audio',\n 'audio/vnd.digital-winds',\n 'audio/vnd.dlna.adts',\n 'audio/vnd.dolby.heaac.1',\n 'audio/vnd.dolby.heaac.2',\n 'audio/vnd.dolby.mlp',\n 'audio/vnd.dolby.mps',\n 'audio/vnd.dolby.pl2',\n 'audio/vnd.dolby.pl2x',\n 'audio/vnd.dolby.pl2z',\n 'audio/vnd.dolby.pulse.1',\n 'audio/vnd.dra',\n 'audio/vnd.dts',\n 'audio/vnd.dts.hd',\n 'audio/vnd.dts.uhd',\n 'audio/vnd.dvb.file',\n 'audio/vnd.everad.plj',\n 'audio/vnd.hns.audio',\n 'audio/vnd.lucent.voice',\n 'audio/vnd.ms-playready.media.pya',\n 'audio/vnd.nokia.mobile-xmf',\n 'audio/vnd.nortel.vbk',\n 'audio/vnd.nuera.ecelp4800',\n 'audio/vnd.nuera.ecelp7470',\n 'audio/vnd.nuera.ecelp9600',\n 'audio/vnd.octel.sbc',\n 'audio/vnd.presonus.multitrack',\n 'audio/vnd.qcelp',\n 'audio/vnd.rhetorex.32kadpcm',\n 'audio/vnd.rip',\n 'audio/vnd.sealedmedia.softseal.mpeg',\n 'audio/vnd.vmx.cvsd',\n 'audio/vorbis',\n 'audio/vorbis-config',\n];\n\n// Partially based on:\n// https://stackoverflow.com/a/4212908/2570866\n\nconst docMimeTypes = [\n // Microsoft Word\n // .doc .dot\n 'application/msword',\n // .doc .dot\n 'application/msword-template',\n\n // LibreOffice/OpenOffice Writer\n // .odt\n 'application/vnd.oasis.opendocument.text',\n // .ott\n 'application/vnd.oasis.opendocument.text-template',\n // .fodt\n 'application/vnd.oasis.opendocument.text-flat-xml',\n // .uot\n // NOTE: firefox doesn't know mimetype so maybe ignore\n];\n\nconst docXMimeTypes = [\n // Microsoft Word\n // .docx\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n // .dotx (no test)\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n // .docm\n 'application/vnd.ms-word.document.macroEnabled.12',\n // .dotm (no test)\n 'application/vnd.ms-word.template.macroEnabled.12',\n];\n\nconst excelMimeTypes = [\n // Microsoft Excel\n // .xls .xlt .xla (no test for .xla)\n 'application/vnd.ms-excel',\n\n // LibreOffice/OpenOffice Calc\n // .ods\n 'application/vnd.oasis.opendocument.spreadsheet',\n // .ots\n 'application/vnd.oasis.opendocument.spreadsheet-template',\n // .fods\n 'application/vnd.oasis.opendocument.spreadsheet-flat-xml',\n];\n\nconst excelXMimeTypes = [\n // .xlsx\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n // .xltx (no test)\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n // .xlsm\n 'application/vnd.ms-excel.sheet.macroEnabled.12',\n // .xltm (no test)\n 'application/vnd.ms-excel.template.macroEnabled.12',\n // .xlam (no test)\n 'application/vnd.ms-excel.addin.macroEnabled.12',\n // .xlsb (no test)\n 'application/vnd.ms-excel.addin.macroEnabled.12',\n];\n\nconst odtMimeTypes = [\n // LibreOffice/OpenOffice Writer\n // .odt\n 'application/vnd.oasis.opendocument.text',\n // .ott\n 'application/vnd.oasis.opendocument.text-template',\n // .fodt\n 'application/vnd.oasis.opendocument.text-flat-xml',\n];\n\nconst powerpointMimeTypes = [\n // Microsoft Word\n // .ppt .pot .pps .ppa (no test for .ppa)\n 'application/vnd.ms-powerpoint',\n\n // LibreOffice/OpenOffice Writer\n // .odp\n 'application/vnd.oasis.opendocument.presentation',\n // .otp\n 'application/vnd.oasis.opendocument.presentation-template',\n // .fodp\n 'application/vnd.oasis.opendocument.presentation-flat-xml',\n // .uop\n // NOTE: firefox doesn't know mimetype so maybe ignore\n];\n\nconst powerpointXMimeTypes = [\n // .pptx\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n // .potx (no test)\n 'application/vnd.openxmlformats-officedocument.presentationml.template',\n // .ppsx\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n // .ppam\n 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n // .pptm\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n // .potm\n 'application/vnd.ms-powerpoint.template.macroEnabled.12',\n // .ppsm\n 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n];\n\nconst tarFileTypes = [\n // .ar\n 'application/x-archive',\n // .tar\n 'application/x-tar',\n // .tar.gz\n 'application/gzip',\n // .tar.Z\n 'application/x-compress',\n // .tar.bz2\n 'application/x-bzip',\n // .tar.lz\n 'application/x-lzip',\n // .tar.lz4\n 'application/x-lz4',\n // .tar.lzma\n 'application/x-lzma',\n // .tar.lzo (no test)\n 'application/x-lzop',\n // .tar.xz\n 'application/x-xz',\n // .war\n 'application/x-webarchive',\n];\n\nconst zipFileTypes = [\n // .gzip\n 'application/gzip',\n // .zip\n 'application/zip',\n];\n\nconst mimeTypeToIconMap: Record<string, React.FC<IconProps>> = {\n 'application/pdf': PDF, // .pdf\n 'application/rtf': RTF, // .rtf\n 'application/vnd.rar': RAR, // .rar\n 'application/x-7z-compressed': SEVEN_Z, // .z7\n 'text/csv': CSV, // .csv\n 'text/html': HTML, // .html .htm\n 'text/markdown': MD, // .md\n 'text/plain': TXT, // .txt\n};\n\nfor (const type of audioFileTypes) {\n mimeTypeToIconMap[type] = Audio;\n}\n\nfor (const type of docMimeTypes) {\n mimeTypeToIconMap[type] = DOC;\n}\n\nfor (const type of docXMimeTypes) {\n mimeTypeToIconMap[type] = DOCX;\n}\n\nfor (const type of excelMimeTypes) {\n mimeTypeToIconMap[type] = XLS;\n}\n\nfor (const type of excelXMimeTypes) {\n mimeTypeToIconMap[type] = XLSX;\n}\n\nfor (const type of odtMimeTypes) {\n mimeTypeToIconMap[type] = ODT;\n}\n\nfor (const type of powerpointMimeTypes) {\n mimeTypeToIconMap[type] = PPT;\n}\n\nfor (const type of powerpointXMimeTypes) {\n mimeTypeToIconMap[type] = PPTX;\n}\n\nfor (const type of tarFileTypes) {\n mimeTypeToIconMap[type] = TAR;\n}\n\nfor (const type of zipFileTypes) {\n mimeTypeToIconMap[type] = ZIP;\n}\n\nfunction mimeTypeToIcon(mimeType?: string): React.FC<IconProps> {\n if (!mimeType) return GenericFile;\n\n const Icon = mimeTypeToIconMap[mimeType];\n if (Icon) return Icon;\n\n return GenericFile;\n}\n\nexport type FileIconProps = {\n mimeType?: string;\n size?: number;\n};\n\nexport const FileIcon: React.FC<FileIconProps> = ({ mimeType, size }) => {\n const {\n theme: {\n messageSimple: {\n file: { icon },\n },\n },\n } = useTheme();\n\n const Icon = mimeTypeToIcon(mimeType);\n\n return <Icon {...(size ? { height: size, width: size } : {})} {...icon} />;\n};\n\nFileIcon.displayName = 'FileIcon{messageSimple{file{icon}}}';\n"]}
1
+ {"version":3,"sources":["FileIcon.tsx"],"names":["audioFileTypes","docMimeTypes","docXMimeTypes","excelMimeTypes","excelXMimeTypes","odtMimeTypes","powerpointMimeTypes","powerpointXMimeTypes","tarFileTypes","zipFileTypes","videoFileTypes","mimeTypeToIconMap","PDF","RTF","RAR","SEVEN_Z","CSV","HTML","MD","TXT","type","Audio","DOC","DOCX","XLS","XLSX","ODT","PPT","PPTX","TAR","ZIP","Video","mimeTypeToIcon","mimeType","GenericFile","Icon","FileIcon","size","icon","theme","messageSimple","file","height","width","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\n\nimport { Audio } from '../../icons/Audio';\nimport { CSV } from '../../icons/CSV';\nimport { DOC } from '../../icons/DOC';\nimport { DOCX } from '../../icons/DOCX';\nimport { GenericFile } from '../../icons/GenericFile';\nimport { HTML } from '../../icons/HTML';\nimport { MD } from '../../icons/MD';\nimport { ODT } from '../../icons/ODT';\nimport { PDF } from '../../icons/PDF';\nimport { PPT } from '../../icons/PPT';\nimport { PPTX } from '../../icons/PPTX';\nimport { RAR } from '../../icons/RAR';\nimport { RTF } from '../../icons/RTF';\nimport { SEVEN_Z } from '../../icons/SEVEN_Z';\nimport { TAR } from '../../icons/TAR';\nimport { TXT } from '../../icons/TXT';\nimport type { IconProps } from '../../icons/utils/base';\nimport { Video } from '../../icons/Video';\nimport { XLS } from '../../icons/XLS';\nimport { XLSX } from '../../icons/XLSX';\nimport { ZIP } from '../../icons/ZIP';\n\n// https://www.iana.org/assignments/media-types/media-types.xhtml#audio\nconst audioFileTypes = [\n 'audio/1d-interleaved-parityfec',\n 'audio/32kadpcm',\n 'audio/3gpp',\n 'audio/3gpp2',\n 'audio/aac',\n 'audio/ac3',\n 'audio/AMR',\n 'audio/AMR-WB',\n 'audio/amr-wb+',\n 'audio/aptx',\n 'audio/asc',\n 'audio/ATRAC-ADVANCED-LOSSLESS',\n 'audio/ATRAC-X',\n 'audio/ATRAC3',\n 'audio/basic',\n 'audio/BV16',\n 'audio/BV32',\n 'audio/clearmode',\n 'audio/CN',\n 'audio/DAT12',\n 'audio/dls',\n 'audio/dsr-es201108',\n 'audio/dsr-es202050',\n 'audio/dsr-es202211',\n 'audio/dsr-es202212',\n 'audio/DV',\n 'audio/DVI4',\n 'audio/eac3',\n 'audio/encaprtp',\n 'audio/EVRC',\n 'audio/EVRC-QCP',\n 'audio/EVRC0',\n 'audio/EVRC1',\n 'audio/EVRCB',\n 'audio/EVRCB0',\n 'audio/EVRCB1',\n 'audio/EVRCNW',\n 'audio/EVRCNW0',\n 'audio/EVRCNW1',\n 'audio/EVRCWB',\n 'audio/EVRCWB0',\n 'audio/EVRCWB1',\n 'audio/EVS',\n 'audio/example',\n 'audio/flexfec',\n 'audio/fwdred',\n 'audio/G711-0',\n 'audio/G719',\n 'audio/G7221',\n 'audio/G722',\n 'audio/G723',\n 'audio/G726-16',\n 'audio/G726-24',\n 'audio/G726-32',\n 'audio/G726-40',\n 'audio/G728',\n 'audio/G729',\n 'audio/G7291',\n 'audio/G729D',\n 'audio/G729E',\n 'audio/GSM',\n 'audio/GSM-EFR',\n 'audio/GSM-HR-08',\n 'audio/iLBC',\n 'audio/ip-mr_v2.5',\n 'audio/L8',\n 'audio/L16',\n 'audio/L20',\n 'audio/L24',\n 'audio/LPC',\n 'audio/MELP',\n 'audio/MELP600',\n 'audio/MELP1200',\n 'audio/MELP2400',\n 'audio/mhas',\n 'audio/mobile-xmf',\n 'audio/MPA',\n 'audio/mp4',\n 'audio/MP4A-LATM',\n 'audio/mpa-robust',\n 'audio/mpeg',\n 'audio/mpeg4-generic',\n 'audio/ogg',\n 'audio/opus',\n 'audio/parityfec',\n 'audio/PCMA',\n 'audio/PCMA-WB',\n 'audio/PCMU',\n 'audio/PCMU-WB',\n 'audio/prs.sid',\n 'audio/raptorfec',\n 'audio/RED',\n 'audio/rtp-enc-aescm128',\n 'audio/rtploopback',\n 'audio/rtp-midi',\n 'audio/rtx',\n 'audio/SMV',\n 'audio/SMV0',\n 'audio/SMV-QCP',\n 'audio/sofa',\n 'audio/sp-midi',\n 'audio/speex',\n 'audio/t140c',\n 'audio/t38',\n 'audio/telephone-event',\n 'audio/TETRA_ACELP',\n 'audio/TETRA_ACELP_BB',\n 'audio/tone',\n 'audio/TSVCIS',\n 'audio/UEMCLIP',\n 'audio/ulpfec',\n 'audio/usac',\n 'audio/VDVI',\n 'audio/VMR-WB',\n 'audio/vnd.3gpp.iufp',\n 'audio/vnd.4SB',\n 'audio/vnd.audiokoz',\n 'audio/vnd.CELP',\n 'audio/vnd.cisco.nse',\n 'audio/vnd.cmles.radio-events',\n 'audio/vnd.cns.anp1',\n 'audio/vnd.cns.inf1',\n 'audio/vnd.dece.audio',\n 'audio/vnd.digital-winds',\n 'audio/vnd.dlna.adts',\n 'audio/vnd.dolby.heaac.1',\n 'audio/vnd.dolby.heaac.2',\n 'audio/vnd.dolby.mlp',\n 'audio/vnd.dolby.mps',\n 'audio/vnd.dolby.pl2',\n 'audio/vnd.dolby.pl2x',\n 'audio/vnd.dolby.pl2z',\n 'audio/vnd.dolby.pulse.1',\n 'audio/vnd.dra',\n 'audio/vnd.dts',\n 'audio/vnd.dts.hd',\n 'audio/vnd.dts.uhd',\n 'audio/vnd.dvb.file',\n 'audio/vnd.everad.plj',\n 'audio/vnd.hns.audio',\n 'audio/vnd.lucent.voice',\n 'audio/vnd.ms-playready.media.pya',\n 'audio/vnd.nokia.mobile-xmf',\n 'audio/vnd.nortel.vbk',\n 'audio/vnd.nuera.ecelp4800',\n 'audio/vnd.nuera.ecelp7470',\n 'audio/vnd.nuera.ecelp9600',\n 'audio/vnd.octel.sbc',\n 'audio/vnd.presonus.multitrack',\n 'audio/vnd.qcelp',\n 'audio/vnd.rhetorex.32kadpcm',\n 'audio/vnd.rip',\n 'audio/vnd.sealedmedia.softseal.mpeg',\n 'audio/vnd.vmx.cvsd',\n 'audio/vorbis',\n 'audio/vorbis-config',\n];\n\n// Partially based on:\n// https://stackoverflow.com/a/4212908/2570866\n\nconst docMimeTypes = [\n // Microsoft Word\n // .doc .dot\n 'application/msword',\n // .doc .dot\n 'application/msword-template',\n\n // LibreOffice/OpenOffice Writer\n // .odt\n 'application/vnd.oasis.opendocument.text',\n // .ott\n 'application/vnd.oasis.opendocument.text-template',\n // .fodt\n 'application/vnd.oasis.opendocument.text-flat-xml',\n // .uot\n // NOTE: firefox doesn't know mimetype so maybe ignore\n];\n\nconst docXMimeTypes = [\n // Microsoft Word\n // .docx\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n // .dotx (no test)\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n // .docm\n 'application/vnd.ms-word.document.macroEnabled.12',\n // .dotm (no test)\n 'application/vnd.ms-word.template.macroEnabled.12',\n];\n\nconst excelMimeTypes = [\n // Microsoft Excel\n // .xls .xlt .xla (no test for .xla)\n 'application/vnd.ms-excel',\n\n // LibreOffice/OpenOffice Calc\n // .ods\n 'application/vnd.oasis.opendocument.spreadsheet',\n // .ots\n 'application/vnd.oasis.opendocument.spreadsheet-template',\n // .fods\n 'application/vnd.oasis.opendocument.spreadsheet-flat-xml',\n];\n\nconst excelXMimeTypes = [\n // .xlsx\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n // .xltx (no test)\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n // .xlsm\n 'application/vnd.ms-excel.sheet.macroEnabled.12',\n // .xltm (no test)\n 'application/vnd.ms-excel.template.macroEnabled.12',\n // .xlam (no test)\n 'application/vnd.ms-excel.addin.macroEnabled.12',\n // .xlsb (no test)\n 'application/vnd.ms-excel.addin.macroEnabled.12',\n];\n\nconst odtMimeTypes = [\n // LibreOffice/OpenOffice Writer\n // .odt\n 'application/vnd.oasis.opendocument.text',\n // .ott\n 'application/vnd.oasis.opendocument.text-template',\n // .fodt\n 'application/vnd.oasis.opendocument.text-flat-xml',\n];\n\nconst powerpointMimeTypes = [\n // Microsoft Word\n // .ppt .pot .pps .ppa (no test for .ppa)\n 'application/vnd.ms-powerpoint',\n\n // LibreOffice/OpenOffice Writer\n // .odp\n 'application/vnd.oasis.opendocument.presentation',\n // .otp\n 'application/vnd.oasis.opendocument.presentation-template',\n // .fodp\n 'application/vnd.oasis.opendocument.presentation-flat-xml',\n // .uop\n // NOTE: firefox doesn't know mimetype so maybe ignore\n];\n\nconst powerpointXMimeTypes = [\n // .pptx\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n // .potx (no test)\n 'application/vnd.openxmlformats-officedocument.presentationml.template',\n // .ppsx\n 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n // .ppam\n 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n // .pptm\n 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n // .potm\n 'application/vnd.ms-powerpoint.template.macroEnabled.12',\n // .ppsm\n 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n];\n\nconst tarFileTypes = [\n // .ar\n 'application/x-archive',\n // .tar\n 'application/x-tar',\n // .tar.gz\n 'application/gzip',\n // .tar.Z\n 'application/x-compress',\n // .tar.bz2\n 'application/x-bzip',\n // .tar.lz\n 'application/x-lzip',\n // .tar.lz4\n 'application/x-lz4',\n // .tar.lzma\n 'application/x-lzma',\n // .tar.lzo (no test)\n 'application/x-lzop',\n // .tar.xz\n 'application/x-xz',\n // .war\n 'application/x-webarchive',\n];\n\nconst zipFileTypes = [\n // .gzip\n 'application/gzip',\n // .zip\n 'application/zip',\n];\n\nconst videoFileTypes = [\n 'video/3g2',\n 'video/3gp',\n 'video/aaf',\n 'video/asf',\n 'video/avchd',\n 'video/avi',\n 'video/drc',\n 'video/flv',\n 'video/m2v',\n 'video/m3u8',\n 'video/m4p',\n 'video/m4v',\n 'video/mkv',\n 'video/mng',\n 'video/mov',\n 'video/mp2',\n 'video/mp4',\n 'video/mpe',\n 'video/mpeg',\n 'video/mpg',\n 'video/mpv',\n 'video/mxf',\n 'video/nsv',\n 'video/ogg',\n 'video/ogv',\n 'video/qt',\n 'video/rm',\n 'video/rmvb',\n 'video/roq',\n 'video/svi',\n 'video/vob',\n 'video/webm',\n 'video/wmv',\n 'video/yuv',\n 'video/quicktime',\n 'video/webm',\n 'video/x-flv',\n];\n\nconst mimeTypeToIconMap: Record<string, React.FC<IconProps>> = {\n 'application/pdf': PDF, // .pdf\n 'application/rtf': RTF, // .rtf\n 'application/vnd.rar': RAR, // .rar\n 'application/x-7z-compressed': SEVEN_Z, // .z7\n 'text/csv': CSV, // .csv\n 'text/html': HTML, // .html .htm\n 'text/markdown': MD, // .md\n 'text/plain': TXT, // .txt\n};\n\nfor (const type of audioFileTypes) {\n mimeTypeToIconMap[type] = Audio;\n}\n\nfor (const type of docMimeTypes) {\n mimeTypeToIconMap[type] = DOC;\n}\n\nfor (const type of docXMimeTypes) {\n mimeTypeToIconMap[type] = DOCX;\n}\n\nfor (const type of excelMimeTypes) {\n mimeTypeToIconMap[type] = XLS;\n}\n\nfor (const type of excelXMimeTypes) {\n mimeTypeToIconMap[type] = XLSX;\n}\n\nfor (const type of odtMimeTypes) {\n mimeTypeToIconMap[type] = ODT;\n}\n\nfor (const type of powerpointMimeTypes) {\n mimeTypeToIconMap[type] = PPT;\n}\n\nfor (const type of powerpointXMimeTypes) {\n mimeTypeToIconMap[type] = PPTX;\n}\n\nfor (const type of tarFileTypes) {\n mimeTypeToIconMap[type] = TAR;\n}\n\nfor (const type of zipFileTypes) {\n mimeTypeToIconMap[type] = ZIP;\n}\n\nfor (const type of videoFileTypes) {\n mimeTypeToIconMap[type] = Video;\n}\n\nfunction mimeTypeToIcon(mimeType?: string): React.FC<IconProps> {\n if (!mimeType) return GenericFile;\n\n const Icon = mimeTypeToIconMap[mimeType];\n if (Icon) return Icon;\n\n return GenericFile;\n}\n\nexport type FileIconProps = {\n mimeType?: string;\n size?: number;\n};\n\nexport const FileIcon: React.FC<FileIconProps> = ({ mimeType, size }) => {\n const {\n theme: {\n messageSimple: {\n file: { icon },\n },\n },\n } = useTheme();\n\n const Icon = mimeTypeToIcon(mimeType);\n\n return <Icon {...(size ? { height: size, width: size } : {})} {...icon} />;\n};\n\nFileIcon.displayName = 'FileIcon{messageSimple{file{icon}}}';\n"]}
@@ -21,10 +21,18 @@ var _reactNative = require("react-native");
21
21
 
22
22
  var _bottomSheet = _interopRequireWildcard(require("@gorhom/bottom-sheet"));
23
23
 
24
+ var _dayjs = _interopRequireDefault(require("dayjs"));
25
+
26
+ var _duration = _interopRequireDefault(require("dayjs/plugin/duration"));
27
+
28
+ var _mimeTypes = require("mime-types");
29
+
24
30
  var _AttachmentPickerContext = require("../../contexts/attachmentPickerContext/AttachmentPickerContext");
25
31
 
26
32
  var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
27
33
 
34
+ var _icons = require("../../icons");
35
+
28
36
  var _native = require("../../native");
29
37
 
30
38
  var _utils = require("../../utils/utils");
@@ -36,13 +44,27 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
36
44
 
37
45
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
38
46
 
47
+ _dayjs["default"].extend(_duration["default"]);
48
+
39
49
  var styles = _reactNative.StyleSheet.create({
40
50
  container: {
41
51
  flexGrow: 1
42
52
  },
53
+ durationText: {
54
+ fontWeight: 'bold'
55
+ },
43
56
  overlay: {
44
57
  alignItems: 'flex-end',
45
58
  flex: 1
59
+ },
60
+ videoView: {
61
+ bottom: 5,
62
+ display: 'flex',
63
+ flexDirection: 'row',
64
+ justifyContent: 'space-between',
65
+ paddingHorizontal: 5,
66
+ position: 'absolute',
67
+ width: '100%'
46
68
  }
47
69
  });
48
70
 
@@ -50,27 +72,72 @@ var screenHeight = (0, _utils.vh)(100);
50
72
 
51
73
  var fullScreenHeight = _reactNative.Dimensions.get('window').height;
52
74
 
53
- var AttachmentImage = function AttachmentImage(props) {
54
- var ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
75
+ var AttachmentVideo = function AttachmentVideo(props) {
76
+ var asset = props.asset,
77
+ ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
78
+ maxNumberOfFiles = props.maxNumberOfFiles,
55
79
  numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
56
- onPress = props.onPress,
57
80
  selected = props.selected,
58
- uri = props.uri;
81
+ setSelectedFiles = props.setSelectedFiles;
59
82
 
60
83
  var _useTheme = (0, _ThemeContext.useTheme)(),
61
84
  _useTheme$theme = _useTheme.theme,
62
85
  _useTheme$theme$attac = _useTheme$theme.attachmentPicker,
86
+ durationText = _useTheme$theme$attac.durationText,
63
87
  image = _useTheme$theme$attac.image,
64
88
  imageOverlay = _useTheme$theme$attac.imageOverlay,
65
- overlay = _useTheme$theme.colors.overlay;
89
+ _useTheme$theme$color = _useTheme$theme.colors,
90
+ overlay = _useTheme$theme$color.overlay,
91
+ white = _useTheme$theme$color.white;
92
+
93
+ var duration = asset.duration,
94
+ playableDuration = asset.playableDuration,
95
+ uri = asset.uri;
96
+ var videoDuration = duration ? duration : playableDuration;
97
+ var ONE_HOUR_IN_SECONDS = 3600;
98
+ var durationLabel = '00:00';
99
+
100
+ if (videoDuration) {
101
+ var isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;
102
+ var formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';
103
+
104
+ var formattedVideoDuration = _dayjs["default"].duration(videoDuration, 'second').format(formattedDurationParam);
105
+
106
+ durationLabel = formattedVideoDuration;
107
+ }
66
108
 
67
109
  var size = (0, _utils.vw)(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;
110
+
111
+ var onPressVideo = function onPressVideo() {
112
+ if (selected) {
113
+ setSelectedFiles(function (files) {
114
+ return files.filter(function (file) {
115
+ return file.uri !== asset.uri;
116
+ });
117
+ });
118
+ } else {
119
+ setSelectedFiles(function (files) {
120
+ if (files.length >= maxNumberOfFiles) {
121
+ return files;
122
+ }
123
+
124
+ return [].concat((0, _toConsumableArray2["default"])(files), [{
125
+ duration: durationLabel,
126
+ name: asset.filename,
127
+ size: asset.fileSize,
128
+ type: 'video',
129
+ uri: asset.uri
130
+ }]);
131
+ });
132
+ }
133
+ };
134
+
68
135
  return _react["default"].createElement(_bottomSheet.TouchableOpacity, {
69
- onPress: onPress,
136
+ onPress: onPressVideo,
70
137
  __self: _this,
71
138
  __source: {
72
139
  fileName: _jsxFileName,
73
- lineNumber: 65,
140
+ lineNumber: 136,
74
141
  columnNumber: 5
75
142
  }
76
143
  }, _react["default"].createElement(_reactNative.ImageBackground, {
@@ -85,7 +152,7 @@ var AttachmentImage = function AttachmentImage(props) {
85
152
  __self: _this,
86
153
  __source: {
87
154
  fileName: _jsxFileName,
88
- lineNumber: 66,
155
+ lineNumber: 137,
89
156
  columnNumber: 7
90
157
  }
91
158
  }, selected && _react["default"].createElement(_reactNative.View, {
@@ -95,29 +162,66 @@ var AttachmentImage = function AttachmentImage(props) {
95
162
  __self: _this,
96
163
  __source: {
97
164
  fileName: _jsxFileName,
98
- lineNumber: 78,
165
+ lineNumber: 149,
99
166
  columnNumber: 11
100
167
  }
101
168
  }, _react["default"].createElement(ImageOverlaySelectedComponent, {
102
169
  __self: _this,
103
170
  __source: {
104
171
  fileName: _jsxFileName,
105
- lineNumber: 79,
172
+ lineNumber: 150,
106
173
  columnNumber: 13
107
174
  }
108
- }))));
175
+ })), _react["default"].createElement(_reactNative.View, {
176
+ style: styles.videoView,
177
+ __self: _this,
178
+ __source: {
179
+ fileName: _jsxFileName,
180
+ lineNumber: 153,
181
+ columnNumber: 9
182
+ }
183
+ }, _react["default"].createElement(_icons.Recorder, {
184
+ height: 20,
185
+ pathFill: white,
186
+ width: 25,
187
+ __self: _this,
188
+ __source: {
189
+ fileName: _jsxFileName,
190
+ lineNumber: 154,
191
+ columnNumber: 11
192
+ }
193
+ }), videoDuration ? _react["default"].createElement(_reactNative.Text, {
194
+ style: [styles.durationText, durationText, {
195
+ color: white
196
+ }],
197
+ __self: _this,
198
+ __source: {
199
+ fileName: _jsxFileName,
200
+ lineNumber: 156,
201
+ columnNumber: 13
202
+ }
203
+ }, durationLabel) : null)));
109
204
  };
110
205
 
111
- var renderImage = function renderImage(_ref) {
112
- var item = _ref.item;
113
- var asset = item.asset,
114
- ImageOverlaySelectedComponent = item.ImageOverlaySelectedComponent,
115
- maxNumberOfFiles = item.maxNumberOfFiles,
116
- numberOfAttachmentPickerImageColumns = item.numberOfAttachmentPickerImageColumns,
117
- selected = item.selected,
118
- setSelectedImages = item.setSelectedImages;
206
+ var AttachmentImage = function AttachmentImage(props) {
207
+ var asset = props.asset,
208
+ ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
209
+ maxNumberOfFiles = props.maxNumberOfFiles,
210
+ numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
211
+ selected = props.selected,
212
+ setSelectedImages = props.setSelectedImages;
119
213
 
120
- var onPress = function onPress() {
214
+ var _useTheme2 = (0, _ThemeContext.useTheme)(),
215
+ _useTheme2$theme = _useTheme2.theme,
216
+ _useTheme2$theme$atta = _useTheme2$theme.attachmentPicker,
217
+ image = _useTheme2$theme$atta.image,
218
+ imageOverlay = _useTheme2$theme$atta.imageOverlay,
219
+ overlay = _useTheme2$theme.colors.overlay;
220
+
221
+ var size = (0, _utils.vw)(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;
222
+ var uri = asset.uri;
223
+
224
+ var onPressImage = function onPressImage() {
121
225
  if (selected) {
122
226
  setSelectedImages(function (images) {
123
227
  return images.filter(function (image) {
@@ -135,16 +239,84 @@ var renderImage = function renderImage(_ref) {
135
239
  }
136
240
  };
137
241
 
138
- return _react["default"].createElement(AttachmentImage, {
242
+ return _react["default"].createElement(_bottomSheet.TouchableOpacity, {
243
+ onPress: onPressImage,
244
+ __self: _this,
245
+ __source: {
246
+ fileName: _jsxFileName,
247
+ lineNumber: 200,
248
+ columnNumber: 5
249
+ }
250
+ }, _react["default"].createElement(_reactNative.ImageBackground, {
251
+ source: {
252
+ uri: uri
253
+ },
254
+ style: [{
255
+ height: size,
256
+ margin: 1,
257
+ width: size
258
+ }, image],
259
+ __self: _this,
260
+ __source: {
261
+ fileName: _jsxFileName,
262
+ lineNumber: 201,
263
+ columnNumber: 7
264
+ }
265
+ }, selected && _react["default"].createElement(_reactNative.View, {
266
+ style: [styles.overlay, {
267
+ backgroundColor: overlay
268
+ }, imageOverlay],
269
+ __self: _this,
270
+ __source: {
271
+ fileName: _jsxFileName,
272
+ lineNumber: 213,
273
+ columnNumber: 11
274
+ }
275
+ }, _react["default"].createElement(ImageOverlaySelectedComponent, {
276
+ __self: _this,
277
+ __source: {
278
+ fileName: _jsxFileName,
279
+ lineNumber: 214,
280
+ columnNumber: 13
281
+ }
282
+ }))));
283
+ };
284
+
285
+ var renderImage = function renderImage(_ref) {
286
+ var item = _ref.item;
287
+ var asset = item.asset,
288
+ ImageOverlaySelectedComponent = item.ImageOverlaySelectedComponent,
289
+ maxNumberOfFiles = item.maxNumberOfFiles,
290
+ numberOfAttachmentPickerImageColumns = item.numberOfAttachmentPickerImageColumns,
291
+ selected = item.selected,
292
+ setSelectedFiles = item.setSelectedFiles,
293
+ setSelectedImages = item.setSelectedImages;
294
+ var contentType = (0, _mimeTypes.lookup)(asset.filename) || 'multipart/form-data';
295
+ var fileType = asset.filename ? contentType.startsWith('image/') ? 'image' : 'video' : asset.type === 'video' ? 'video' : 'image';
296
+ return fileType === 'image' ? _react["default"].createElement(AttachmentImage, {
297
+ asset: asset,
298
+ ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
299
+ maxNumberOfFiles: maxNumberOfFiles,
300
+ numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
301
+ selected: selected,
302
+ setSelectedImages: setSelectedImages,
303
+ __self: _this,
304
+ __source: {
305
+ fileName: _jsxFileName,
306
+ lineNumber: 256,
307
+ columnNumber: 5
308
+ }
309
+ }) : _react["default"].createElement(AttachmentVideo, {
310
+ asset: asset,
139
311
  ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
312
+ maxNumberOfFiles: maxNumberOfFiles,
140
313
  numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
141
- onPress: onPress,
142
314
  selected: selected,
143
- uri: asset.uri,
315
+ setSelectedFiles: setSelectedFiles,
144
316
  __self: _this,
145
317
  __source: {
146
318
  fileName: _jsxFileName,
147
- lineNumber: 121,
319
+ lineNumber: 265,
148
320
  columnNumber: 5
149
321
  }
150
322
  });
@@ -165,16 +337,18 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
165
337
  numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
166
338
  translucentStatusBar = props.translucentStatusBar;
167
339
 
168
- var _useTheme2 = (0, _ThemeContext.useTheme)(),
169
- _useTheme2$theme = _useTheme2.theme,
170
- bottomSheetContentContainer = _useTheme2$theme.attachmentPicker.bottomSheetContentContainer,
171
- white = _useTheme2$theme.colors.white;
340
+ var _useTheme3 = (0, _ThemeContext.useTheme)(),
341
+ _useTheme3$theme = _useTheme3.theme,
342
+ bottomSheetContentContainer = _useTheme3$theme.attachmentPicker.bottomSheetContentContainer,
343
+ white = _useTheme3$theme.colors.white;
172
344
 
173
345
  var _useAttachmentPickerC = (0, _AttachmentPickerContext.useAttachmentPickerContext)(),
174
346
  closePicker = _useAttachmentPickerC.closePicker,
175
347
  maxNumberOfFiles = _useAttachmentPickerC.maxNumberOfFiles,
348
+ selectedFiles = _useAttachmentPickerC.selectedFiles,
176
349
  selectedImages = _useAttachmentPickerC.selectedImages,
177
350
  selectedPicker = _useAttachmentPickerC.selectedPicker,
351
+ setSelectedFiles = _useAttachmentPickerC.setSelectedFiles,
178
352
  setSelectedImages = _useAttachmentPickerC.setSelectedImages,
179
353
  setSelectedPicker = _useAttachmentPickerC.setSelectedPicker,
180
354
  topInset = _useAttachmentPickerC.topInset;
@@ -340,7 +514,10 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
340
514
  numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
341
515
  selected: selectedImages.some(function (image) {
342
516
  return image.uri === asset.uri;
517
+ }) || selectedFiles.some(function (file) {
518
+ return file.uri === asset.uri;
343
519
  }),
520
+ setSelectedFiles: setSelectedFiles,
344
521
  setSelectedImages: setSelectedImages
345
522
  };
346
523
  });
@@ -365,7 +542,7 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
365
542
  __self: _this,
366
543
  __source: {
367
544
  fileName: _jsxFileName,
368
- lineNumber: 361,
545
+ lineNumber: 511,
369
546
  columnNumber: 9
370
547
  }
371
548
  }, _react["default"].createElement(_bottomSheet.BottomSheetFlatList, {
@@ -384,7 +561,7 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
384
561
  __self: _this,
385
562
  __source: {
386
563
  fileName: _jsxFileName,
387
- lineNumber: 377,
564
+ lineNumber: 527,
388
565
  columnNumber: 11
389
566
  }
390
567
  })), selectedPicker === 'images' && photoError && _react["default"].createElement(AttachmentPickerError, {
@@ -395,7 +572,7 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
395
572
  __self: _this,
396
573
  __source: {
397
574
  fileName: _jsxFileName,
398
- lineNumber: 392,
575
+ lineNumber: 542,
399
576
  columnNumber: 11
400
577
  }
401
578
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["AttachmentPicker.tsx"],"names":["styles","StyleSheet","create","container","flexGrow","overlay","alignItems","flex","screenHeight","fullScreenHeight","Dimensions","get","height","AttachmentImage","props","ImageOverlaySelectedComponent","numberOfAttachmentPickerImageColumns","onPress","selected","uri","theme","attachmentPicker","image","imageOverlay","colors","size","margin","width","backgroundColor","renderImage","item","asset","maxNumberOfFiles","setSelectedImages","images","filter","length","AttachmentPicker","React","forwardRef","ref","AttachmentPickerBottomSheetHandle","attachmentPickerBottomSheetHandleHeight","attachmentPickerBottomSheetHeight","AttachmentPickerError","attachmentPickerErrorButtonText","AttachmentPickerErrorImage","attachmentPickerErrorText","numberOfAttachmentImagesToLoadPerCall","translucentStatusBar","bottomSheetContentContainer","white","closePicker","selectedImages","selectedPicker","setSelectedPicker","topInset","currentIndex","setCurrentIndex","endCursor","setEndCursor","photoError","setPhotoError","hasNextPage","setHasNextPage","loadingPhotos","setLoadingPhotos","photos","setPhotos","bottomSheetCloseOnKeyboardShowTimeout","getMorePhotos","after","first","results","assets","console","log","backAction","undefined","backHandler","BackHandler","addEventListener","remove","hideAttachmentPicker","current","clearTimeout","setTimeout","close","keyboardSubscription","Platform","OS","Keyboard","addListener","removeListener","selectedPhotos","map","some","handleHeight","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidBottomBarHeightAdjustment","initialSnapPoint","finalSnapPoint","snapPoints","opacity","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n BackHandler,\n Dimensions,\n ImageBackground,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n View,\n} from 'react-native';\n\nimport BottomSheet, {\n BottomSheetFlatList,\n BottomSheetHandleProps,\n TouchableOpacity,\n} from '@gorhom/bottom-sheet';\n\nimport type { AttachmentPickerErrorProps } from './components/AttachmentPickerError';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Asset, getPhotos } from '../../native';\nimport { vh, vw } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n container: {\n flexGrow: 1,\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n});\n\nconst screenHeight = vh(100);\nconst fullScreenHeight = Dimensions.get('window').height;\n\ntype AttachmentImageProps = {\n ImageOverlaySelectedComponent: React.ComponentType;\n onPress: () => void;\n selected: boolean;\n uri: string;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n ImageOverlaySelectedComponent,\n numberOfAttachmentPickerImageColumns,\n onPress,\n selected,\n uri,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n return (\n <TouchableOpacity onPress={onPress}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst renderImage = ({\n item,\n}: {\n item: {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n selected: boolean;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n };\n}) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected,\n setSelectedImages,\n } = item;\n const onPress = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (images.length >= maxNumberOfFiles) {\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <AttachmentImage\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n onPress={onPress}\n selected={selected}\n uri={asset.uri}\n />\n );\n};\n\nexport type AttachmentPickerProps = {\n /**\n * Custom UI component to render [draggable handle](https://github.com/GetStream/stream-chat-react-native/blob/master/screenshots/docs/1.png) of attachment picker.\n *\n * **Default** [AttachmentPickerBottomSheetHandle](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx)\n */\n AttachmentPickerBottomSheetHandle: React.FC<BottomSheetHandleProps>;\n /**\n * Custom UI component to render error component while opening attachment picker.\n *\n * **Default** [AttachmentPickerError](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx)\n */\n AttachmentPickerError: React.ComponentType<AttachmentPickerErrorProps>;\n /**\n * Custom UI component to render error image for attachment picker\n *\n * **Default** [AttachmentPickerErrorImage](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/AttachmentPickerErrorImage.tsx)\n */\n AttachmentPickerErrorImage: React.ComponentType;\n /**\n * Custom UI component to render overlay component, that shows up on top of [selected image](https://github.com/GetStream/stream-chat-react-native/blob/master/screenshots/docs/1.png) (with tick mark)\n *\n * **Default** [ImageOverlaySelectedComponent](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/ImageOverlaySelectedComponent.tsx)\n */\n ImageOverlaySelectedComponent: React.ComponentType;\n attachmentPickerBottomSheetHandleHeight?: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentPickerErrorButtonText?: string;\n attachmentPickerErrorText?: string;\n numberOfAttachmentImagesToLoadPerCall?: number;\n numberOfAttachmentPickerImageColumns?: number;\n translucentStatusBar?: boolean;\n};\n\nexport const AttachmentPicker = React.forwardRef(\n (props: AttachmentPickerProps, ref: React.ForwardedRef<BottomSheet>) => {\n const {\n AttachmentPickerBottomSheetHandle,\n attachmentPickerBottomSheetHandleHeight,\n attachmentPickerBottomSheetHeight,\n AttachmentPickerError,\n attachmentPickerErrorButtonText,\n AttachmentPickerErrorImage,\n attachmentPickerErrorText,\n ImageOverlaySelectedComponent,\n numberOfAttachmentImagesToLoadPerCall,\n numberOfAttachmentPickerImageColumns,\n translucentStatusBar,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { bottomSheetContentContainer },\n colors: { white },\n },\n } = useTheme();\n const {\n closePicker,\n maxNumberOfFiles,\n selectedImages,\n selectedPicker,\n setSelectedImages,\n setSelectedPicker,\n topInset,\n } = useAttachmentPickerContext();\n\n const [currentIndex, setCurrentIndex] = useState(-1);\n const [endCursor, setEndCursor] = useState<string>();\n const [photoError, setPhotoError] = useState(false);\n const [hasNextPage, setHasNextPage] = useState(true);\n const [loadingPhotos, setLoadingPhotos] = useState(false);\n const [photos, setPhotos] = useState<Asset[]>([]);\n const bottomSheetCloseOnKeyboardShowTimeout = useRef<NodeJS.Timeout>();\n\n const getMorePhotos = async () => {\n if (hasNextPage && !loadingPhotos && currentIndex > -1 && selectedPicker === 'images') {\n setLoadingPhotos(true);\n try {\n const results = await getPhotos({\n after: endCursor,\n first: numberOfAttachmentImagesToLoadPerCall ?? 60,\n });\n if (endCursor) {\n setPhotos([...photos, ...results.assets]);\n } else {\n setPhotos(results.assets);\n }\n setEndCursor(results.endCursor);\n setHasNextPage(results.hasNextPage || false);\n } catch (error) {\n console.log(error);\n setPhotoError(true);\n }\n setLoadingPhotos(false);\n }\n };\n\n useEffect(() => {\n const backAction = () => {\n if (selectedPicker) {\n setSelectedPicker(undefined);\n closePicker();\n return true;\n }\n\n return false;\n };\n\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);\n\n return () => backHandler.remove();\n }, [selectedPicker]);\n\n useEffect(() => {\n const hideAttachmentPicker = () => {\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n setSelectedPicker(undefined);\n // This short timeout is to prevent a race condition\n // where the close function is called during the point when a internal container layout happens within the bottomsheet due to keyboard affecting the layout\n // If the container layout measures a shorter height than previous but if the close snapped to the previous height's position, the bottom sheet will show up\n // this short delay ensures that close function is always called after a container layout due to keyboard change\n bottomSheetCloseOnKeyboardShowTimeout.current = setTimeout(\n () => (ref as React.MutableRefObject<BottomSheet | undefined>).current?.close(),\n 150,\n );\n };\n const keyboardSubscription =\n Platform.OS === 'ios'\n ? Keyboard.addListener('keyboardWillShow', hideAttachmentPicker)\n : Keyboard.addListener('keyboardDidShow', hideAttachmentPicker);\n\n return () => {\n if (keyboardSubscription?.remove) {\n keyboardSubscription.remove();\n return;\n }\n\n // To keep compatibility with older versions of React Native, where `remove()` is not available\n if (Platform.OS === 'ios') {\n Keyboard.removeListener('keyboardWillShow', hideAttachmentPicker);\n } else {\n Keyboard.removeListener('keyboardDidShow', hideAttachmentPicker);\n }\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (currentIndex < 0) {\n setSelectedPicker(undefined);\n if (!loadingPhotos) {\n setEndCursor(undefined);\n setHasNextPage(true);\n }\n }\n }, [currentIndex]);\n\n useEffect(() => {\n if (\n selectedPicker === 'images' &&\n endCursor === undefined &&\n currentIndex > -1 &&\n !loadingPhotos\n ) {\n setPhotoError(false);\n getMorePhotos();\n }\n }, [currentIndex, selectedPicker]);\n\n const selectedPhotos = photos.map((asset) => ({\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected: selectedImages.some((image) => image.uri === asset.uri),\n setSelectedImages,\n }));\n\n const handleHeight = attachmentPickerBottomSheetHandleHeight || 20;\n\n /**\n * This is to handle issues with Android measurements coming back incorrect.\n * If the StatusBar height is perfectly 1/2 of the difference between the two\n * dimensions for screen and window, it is incorrect and we need to account for\n * this. If you use a translucent header bar more adjustments are needed.\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;\n const androidBottomBarHeightAdjustment =\n Platform.OS === 'android'\n ? bottomBarHeight === statusBarHeight\n ? translucentStatusBar\n ? 0\n : StatusBar.currentHeight ?? 0\n : translucentStatusBar\n ? bottomBarHeight > statusBarHeight\n ? -bottomBarHeight + statusBarHeight\n : bottomBarHeight > 0\n ? -statusBarHeight\n : 0\n : bottomBarHeight > 0\n ? 0\n : statusBarHeight\n : 0;\n\n const initialSnapPoint =\n attachmentPickerBottomSheetHeight ?? Platform.OS === 'android'\n ? 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment) - handleHeight\n : 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment);\n\n const finalSnapPoint =\n Platform.OS === 'android'\n ? fullScreenHeight - topInset - handleHeight\n : fullScreenHeight - topInset;\n\n /**\n * Snap points changing cause a rerender of the position,\n * this is an issue if you are calling close on the bottom sheet.\n */\n const snapPoints = useMemo(\n () => [initialSnapPoint, finalSnapPoint],\n [initialSnapPoint, finalSnapPoint],\n );\n\n return (\n <>\n <BottomSheet\n containerHeight={fullScreenHeight}\n enablePanDownToClose={true}\n handleComponent={\n /**\n * using `null` here instead of `style={{ opacity: photoError ? 0 : 1 }}`\n * as opacity is not an allowed style\n */\n photoError ? null : AttachmentPickerBottomSheetHandle\n }\n handleHeight={handleHeight}\n index={-1}\n onChange={setCurrentIndex}\n ref={ref}\n snapPoints={snapPoints}\n >\n <BottomSheetFlatList\n contentContainerStyle={[\n styles.container,\n { backgroundColor: white },\n bottomSheetContentContainer,\n { opacity: photoError ? 0 : 1 },\n ]}\n data={selectedPhotos}\n keyExtractor={(item) => item.asset.uri}\n numColumns={numberOfAttachmentPickerImageColumns ?? 3}\n onEndReached={getMorePhotos}\n renderItem={renderImage}\n />\n </BottomSheet>\n {selectedPicker === 'images' && photoError && (\n <AttachmentPickerError\n attachmentPickerBottomSheetHeight={attachmentPickerBottomSheetHeight}\n attachmentPickerErrorButtonText={attachmentPickerErrorButtonText}\n AttachmentPickerErrorImage={AttachmentPickerErrorImage}\n attachmentPickerErrorText={attachmentPickerErrorText}\n />\n )}\n </>\n );\n },\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n"]}
1
+ {"version":3,"sources":["AttachmentPicker.tsx"],"names":["dayjs","extend","duration","styles","StyleSheet","create","container","flexGrow","durationText","fontWeight","overlay","alignItems","flex","videoView","bottom","display","flexDirection","justifyContent","paddingHorizontal","position","width","screenHeight","fullScreenHeight","Dimensions","get","height","AttachmentVideo","props","asset","ImageOverlaySelectedComponent","maxNumberOfFiles","numberOfAttachmentPickerImageColumns","selected","setSelectedFiles","theme","attachmentPicker","image","imageOverlay","colors","white","playableDuration","uri","videoDuration","ONE_HOUR_IN_SECONDS","durationLabel","isDurationLongerThanHour","formattedDurationParam","formattedVideoDuration","format","size","onPressVideo","files","filter","file","length","name","filename","fileSize","type","margin","backgroundColor","color","AttachmentImage","setSelectedImages","onPressImage","images","renderImage","item","contentType","fileType","startsWith","AttachmentPicker","React","forwardRef","ref","AttachmentPickerBottomSheetHandle","attachmentPickerBottomSheetHandleHeight","attachmentPickerBottomSheetHeight","AttachmentPickerError","attachmentPickerErrorButtonText","AttachmentPickerErrorImage","attachmentPickerErrorText","numberOfAttachmentImagesToLoadPerCall","translucentStatusBar","bottomSheetContentContainer","closePicker","selectedFiles","selectedImages","selectedPicker","setSelectedPicker","topInset","currentIndex","setCurrentIndex","endCursor","setEndCursor","photoError","setPhotoError","hasNextPage","setHasNextPage","loadingPhotos","setLoadingPhotos","photos","setPhotos","bottomSheetCloseOnKeyboardShowTimeout","getMorePhotos","after","first","results","assets","console","log","backAction","undefined","backHandler","BackHandler","addEventListener","remove","hideAttachmentPicker","current","clearTimeout","setTimeout","close","keyboardSubscription","Platform","OS","Keyboard","addListener","removeListener","selectedPhotos","map","some","handleHeight","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidBottomBarHeightAdjustment","initialSnapPoint","finalSnapPoint","snapPoints","opacity","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n BackHandler,\n Dimensions,\n ImageBackground,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n Text,\n View,\n} from 'react-native';\n\nimport BottomSheet, {\n BottomSheetFlatList,\n BottomSheetHandleProps,\n TouchableOpacity,\n} from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport { lookup } from 'mime-types';\n\nimport type { AttachmentPickerErrorProps } from './components/AttachmentPickerError';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Recorder } from '../../icons';\nimport { getPhotos } from '../../native';\nimport type { Asset, File } from '../../types/types';\nimport { vh, vw } from '../../utils/utils';\n\ndayjs.extend(duration);\n\nconst styles = StyleSheet.create({\n container: {\n flexGrow: 1,\n },\n durationText: {\n fontWeight: 'bold',\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n videoView: {\n bottom: 5,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 5,\n position: 'absolute',\n width: '100%',\n },\n});\n\nconst screenHeight = vh(100);\nconst fullScreenHeight = Dimensions.get('window').height;\n\ntype AttachmentImageProps = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n selected: boolean;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\ntype AttachmentVideoProps = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\nconst AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected,\n setSelectedFiles,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { durationText, image, imageOverlay },\n colors: { overlay, white },\n },\n } = useTheme();\n\n const { duration, playableDuration, uri } = asset;\n\n const videoDuration = duration ? duration : playableDuration;\n\n const ONE_HOUR_IN_SECONDS = 3600;\n\n let durationLabel = '00:00';\n\n if (videoDuration) {\n const isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;\n const formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';\n const formattedVideoDuration = dayjs\n .duration(videoDuration, 'second')\n .format(formattedDurationParam);\n durationLabel = formattedVideoDuration;\n }\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const onPressVideo = () => {\n if (selected) {\n setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));\n } else {\n setSelectedFiles((files) => {\n if (files.length >= maxNumberOfFiles) {\n return files;\n }\n return [\n ...files,\n {\n duration: durationLabel,\n name: asset.filename,\n size: asset.fileSize,\n type: 'video',\n uri: asset.uri,\n },\n ];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressVideo}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n <View style={styles.videoView}>\n <Recorder height={20} pathFill={white} width={25} />\n {videoDuration ? (\n <Text style={[styles.durationText, durationText, { color: white }]}>\n {durationLabel}\n </Text>\n ) : null}\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected,\n setSelectedImages,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const { uri } = asset;\n\n const onPressImage = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (images.length >= maxNumberOfFiles) {\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressImage}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst renderImage = ({\n item,\n}: {\n item: {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n };\n}) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected,\n setSelectedFiles,\n setSelectedImages,\n } = item;\n\n const contentType = lookup(asset.filename) || 'multipart/form-data';\n\n const fileType = asset.filename\n ? contentType.startsWith('image/')\n ? 'image'\n : 'video'\n : asset.type === 'video'\n ? 'video'\n : 'image';\n\n return fileType === 'image' ? (\n <AttachmentImage\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n selected={selected}\n setSelectedImages={setSelectedImages}\n />\n ) : (\n <AttachmentVideo\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n selected={selected}\n setSelectedFiles={setSelectedFiles}\n />\n );\n};\n\nexport type AttachmentPickerProps = {\n /**\n * Custom UI component to render [draggable handle](https://github.com/GetStream/stream-chat-react-native/blob/master/screenshots/docs/1.png) of attachment picker.\n *\n * **Default** [AttachmentPickerBottomSheetHandle](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx)\n */\n AttachmentPickerBottomSheetHandle: React.FC<BottomSheetHandleProps>;\n /**\n * Custom UI component to render error component while opening attachment picker.\n *\n * **Default** [AttachmentPickerError](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx)\n */\n AttachmentPickerError: React.ComponentType<AttachmentPickerErrorProps>;\n /**\n * Custom UI component to render error image for attachment picker\n *\n * **Default** [AttachmentPickerErrorImage](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/AttachmentPickerErrorImage.tsx)\n */\n AttachmentPickerErrorImage: React.ComponentType;\n /**\n * Custom UI component to render overlay component, that shows up on top of [selected image](https://github.com/GetStream/stream-chat-react-native/blob/master/screenshots/docs/1.png) (with tick mark)\n *\n * **Default** [ImageOverlaySelectedComponent](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/ImageOverlaySelectedComponent.tsx)\n */\n ImageOverlaySelectedComponent: React.ComponentType;\n attachmentPickerBottomSheetHandleHeight?: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentPickerErrorButtonText?: string;\n attachmentPickerErrorText?: string;\n numberOfAttachmentImagesToLoadPerCall?: number;\n numberOfAttachmentPickerImageColumns?: number;\n translucentStatusBar?: boolean;\n};\n\nexport const AttachmentPicker = React.forwardRef(\n (props: AttachmentPickerProps, ref: React.ForwardedRef<BottomSheet>) => {\n const {\n AttachmentPickerBottomSheetHandle,\n attachmentPickerBottomSheetHandleHeight,\n attachmentPickerBottomSheetHeight,\n AttachmentPickerError,\n attachmentPickerErrorButtonText,\n AttachmentPickerErrorImage,\n attachmentPickerErrorText,\n ImageOverlaySelectedComponent,\n numberOfAttachmentImagesToLoadPerCall,\n numberOfAttachmentPickerImageColumns,\n translucentStatusBar,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { bottomSheetContentContainer },\n colors: { white },\n },\n } = useTheme();\n const {\n closePicker,\n maxNumberOfFiles,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setSelectedFiles,\n setSelectedImages,\n setSelectedPicker,\n topInset,\n } = useAttachmentPickerContext();\n\n const [currentIndex, setCurrentIndex] = useState(-1);\n const [endCursor, setEndCursor] = useState<string>();\n const [photoError, setPhotoError] = useState(false);\n const [hasNextPage, setHasNextPage] = useState(true);\n const [loadingPhotos, setLoadingPhotos] = useState(false);\n const [photos, setPhotos] = useState<Asset[]>([]);\n const bottomSheetCloseOnKeyboardShowTimeout = useRef<NodeJS.Timeout>();\n\n const getMorePhotos = async () => {\n if (hasNextPage && !loadingPhotos && currentIndex > -1 && selectedPicker === 'images') {\n setLoadingPhotos(true);\n try {\n const results = await getPhotos({\n after: endCursor,\n first: numberOfAttachmentImagesToLoadPerCall ?? 60,\n });\n if (endCursor) {\n setPhotos([...photos, ...results.assets]);\n } else {\n setPhotos(results.assets);\n }\n setEndCursor(results.endCursor);\n setHasNextPage(results.hasNextPage || false);\n } catch (error) {\n console.log(error);\n setPhotoError(true);\n }\n setLoadingPhotos(false);\n }\n };\n\n useEffect(() => {\n const backAction = () => {\n if (selectedPicker) {\n setSelectedPicker(undefined);\n closePicker();\n return true;\n }\n\n return false;\n };\n\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);\n\n return () => backHandler.remove();\n }, [selectedPicker]);\n\n useEffect(() => {\n const hideAttachmentPicker = () => {\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n setSelectedPicker(undefined);\n // This short timeout is to prevent a race condition\n // where the close function is called during the point when a internal container layout happens within the bottomsheet due to keyboard affecting the layout\n // If the container layout measures a shorter height than previous but if the close snapped to the previous height's position, the bottom sheet will show up\n // this short delay ensures that close function is always called after a container layout due to keyboard change\n bottomSheetCloseOnKeyboardShowTimeout.current = setTimeout(\n () => (ref as React.MutableRefObject<BottomSheet | undefined>).current?.close(),\n 150,\n );\n };\n const keyboardSubscription =\n Platform.OS === 'ios'\n ? Keyboard.addListener('keyboardWillShow', hideAttachmentPicker)\n : Keyboard.addListener('keyboardDidShow', hideAttachmentPicker);\n\n return () => {\n if (keyboardSubscription?.remove) {\n keyboardSubscription.remove();\n return;\n }\n\n // To keep compatibility with older versions of React Native, where `remove()` is not available\n if (Platform.OS === 'ios') {\n Keyboard.removeListener('keyboardWillShow', hideAttachmentPicker);\n } else {\n Keyboard.removeListener('keyboardDidShow', hideAttachmentPicker);\n }\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (currentIndex < 0) {\n setSelectedPicker(undefined);\n if (!loadingPhotos) {\n setEndCursor(undefined);\n setHasNextPage(true);\n }\n }\n }, [currentIndex]);\n\n useEffect(() => {\n if (\n selectedPicker === 'images' &&\n endCursor === undefined &&\n currentIndex > -1 &&\n !loadingPhotos\n ) {\n setPhotoError(false);\n getMorePhotos();\n }\n }, [currentIndex, selectedPicker]);\n\n const selectedPhotos = photos.map((asset) => ({\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected:\n selectedImages.some((image) => image.uri === asset.uri) ||\n selectedFiles.some((file) => file.uri === asset.uri),\n setSelectedFiles,\n setSelectedImages,\n }));\n\n const handleHeight = attachmentPickerBottomSheetHandleHeight || 20;\n\n /**\n * This is to handle issues with Android measurements coming back incorrect.\n * If the StatusBar height is perfectly 1/2 of the difference between the two\n * dimensions for screen and window, it is incorrect and we need to account for\n * this. If you use a translucent header bar more adjustments are needed.\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;\n const androidBottomBarHeightAdjustment =\n Platform.OS === 'android'\n ? bottomBarHeight === statusBarHeight\n ? translucentStatusBar\n ? 0\n : StatusBar.currentHeight ?? 0\n : translucentStatusBar\n ? bottomBarHeight > statusBarHeight\n ? -bottomBarHeight + statusBarHeight\n : bottomBarHeight > 0\n ? -statusBarHeight\n : 0\n : bottomBarHeight > 0\n ? 0\n : statusBarHeight\n : 0;\n\n const initialSnapPoint =\n attachmentPickerBottomSheetHeight ?? Platform.OS === 'android'\n ? 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment) - handleHeight\n : 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment);\n\n const finalSnapPoint =\n Platform.OS === 'android'\n ? fullScreenHeight - topInset - handleHeight\n : fullScreenHeight - topInset;\n\n /**\n * Snap points changing cause a rerender of the position,\n * this is an issue if you are calling close on the bottom sheet.\n */\n const snapPoints = useMemo(\n () => [initialSnapPoint, finalSnapPoint],\n [initialSnapPoint, finalSnapPoint],\n );\n\n return (\n <>\n <BottomSheet\n containerHeight={fullScreenHeight}\n enablePanDownToClose={true}\n handleComponent={\n /**\n * using `null` here instead of `style={{ opacity: photoError ? 0 : 1 }}`\n * as opacity is not an allowed style\n */\n photoError ? null : AttachmentPickerBottomSheetHandle\n }\n handleHeight={handleHeight}\n index={-1}\n onChange={setCurrentIndex}\n ref={ref}\n snapPoints={snapPoints}\n >\n <BottomSheetFlatList\n contentContainerStyle={[\n styles.container,\n { backgroundColor: white },\n bottomSheetContentContainer,\n { opacity: photoError ? 0 : 1 },\n ]}\n data={selectedPhotos}\n keyExtractor={(item) => item.asset.uri}\n numColumns={numberOfAttachmentPickerImageColumns ?? 3}\n onEndReached={getMorePhotos}\n renderItem={renderImage}\n />\n </BottomSheet>\n {selectedPicker === 'images' && photoError && (\n <AttachmentPickerError\n attachmentPickerBottomSheetHeight={attachmentPickerBottomSheetHeight}\n attachmentPickerErrorButtonText={attachmentPickerErrorButtonText}\n AttachmentPickerErrorImage={AttachmentPickerErrorImage}\n attachmentPickerErrorText={attachmentPickerErrorText}\n />\n )}\n </>\n );\n },\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n"]}