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.
- package/lib/commonjs/components/Attachment/FileIcon.js +9 -1
- package/lib/commonjs/components/Attachment/FileIcon.js.map +1 -1
- package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +208 -31
- package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +39 -21
- package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js +1 -1
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageInput.js +129 -44
- package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/commonjs/components/Reply/Reply.js +25 -9
- package/lib/commonjs/components/Reply/Reply.js.map +1 -1
- package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js +15 -8
- package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +10 -7
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +16 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/commonjs/contexts/themeContext/utils/theme.js +1 -0
- package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/commonjs/icons/Recorder.js +47 -0
- package/lib/commonjs/icons/Recorder.js.map +1 -0
- package/lib/commonjs/icons/Video.js +82 -0
- package/lib/commonjs/icons/Video.js.map +1 -0
- package/lib/commonjs/icons/index.js +26 -0
- package/lib/commonjs/icons/index.js.map +1 -1
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/FileIcon.js +9 -1
- package/lib/module/components/Attachment/FileIcon.js.map +1 -1
- package/lib/module/components/AttachmentPicker/AttachmentPicker.js +208 -31
- package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageContent.js +39 -21
- package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
- package/lib/module/components/MessageInput/FileUploadPreview.js +1 -1
- package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/module/components/MessageInput/MessageInput.js +129 -44
- package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/module/components/Reply/Reply.js +25 -9
- package/lib/module/components/Reply/Reply.js.map +1 -1
- package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js +15 -8
- package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +10 -7
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +16 -1
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/module/contexts/themeContext/utils/theme.js +1 -0
- package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/module/icons/Recorder.js +47 -0
- package/lib/module/icons/Recorder.js.map +1 -0
- package/lib/module/icons/Video.js +82 -0
- package/lib/module/icons/Video.js.map +1 -0
- package/lib/module/icons/index.js +26 -0
- package/lib/module/icons/index.js.map +1 -1
- package/lib/module/native.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
- package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +3 -2
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +4 -15
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts +1 -0
- package/lib/typescript/icons/Recorder.d.ts +3 -0
- package/lib/typescript/icons/Video.d.ts +3 -0
- package/lib/typescript/icons/index.d.ts +2 -0
- package/lib/typescript/native.d.ts +3 -14
- package/lib/typescript/types/types.d.ts +24 -0
- package/package.json +1 -1
- package/src/components/Attachment/FileIcon.tsx +45 -0
- package/src/components/AttachmentPicker/AttachmentPicker.tsx +172 -22
- package/src/components/Message/MessageSimple/MessageContent.tsx +23 -12
- package/src/components/MessageInput/FileUploadPreview.tsx +1 -1
- package/src/components/MessageInput/MessageInput.tsx +106 -19
- package/src/components/Reply/Reply.tsx +31 -14
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +12 -0
- package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +6 -2
- package/src/contexts/messageInputContext/MessageInputContext.tsx +17 -24
- package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +17 -1
- package/src/contexts/themeContext/utils/theme.ts +2 -0
- package/src/icons/Recorder.tsx +16 -0
- package/src/icons/Video.tsx +37 -0
- package/src/icons/index.ts +2 -0
- package/src/native.ts +4 -14
- package/src/types/types.ts +27 -0
- 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:
|
|
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
|
|
54
|
-
var
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
136
|
+
onPress: onPressVideo,
|
|
70
137
|
__self: _this,
|
|
71
138
|
__source: {
|
|
72
139
|
fileName: _jsxFileName,
|
|
73
|
-
lineNumber:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
112
|
-
var
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
315
|
+
setSelectedFiles: setSelectedFiles,
|
|
144
316
|
__self: _this,
|
|
145
317
|
__source: {
|
|
146
318
|
fileName: _jsxFileName,
|
|
147
|
-
lineNumber:
|
|
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
|
|
169
|
-
|
|
170
|
-
bottomSheetContentContainer =
|
|
171
|
-
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:
|
|
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:
|
|
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:
|
|
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"]}
|