-
Notifications
You must be signed in to change notification settings - Fork 13k
feat: Send multiple files into a single message #32703
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
abhipatel0211
wants to merge
283
commits into
RocketChat:develop
Choose a base branch
from
abhipatel0211:feat/multiple_files_in_one_msg
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+1,639
−913
Draft
Changes from all commits
Commits
Show all changes
283 commits
Select commit
Hold shift + click to select a range
956316e
Merge branch 'develop' into feat/encrypted-files
rodrigok 13566ab
Merge remote-tracking branch 'upstream/feat/encrypted-files' into fea…
abhipatel0211 611f91e
Merge branch 'RocketChat:develop' into feat/encrypted-file
abhipatel0211 48a97f7
Fix placeholder message for threads
rodrigok 446b1a7
Unskip test
rodrigok 35363b6
Merge branch 'develop' into feat/encrypted-files
rodrigok c258b21
Fix ts
rodrigok 989c61c
Fix tests
rodrigok 0a3cb4d
Merge remote-tracking branch 'upstream/feat/encrypted-files' into fea…
abhipatel0211 403ced3
Merge branch 'develop' into feat/encrypted-files
rodrigok ae670ff
Merge branch 'RocketChat:develop' into feat/encrypted-file
abhipatel0211 de94f83
Merge branch 'develop' into feat/encrypted-files
rodrigok 9da9640
Add test for old e2ee msg format
rodrigok 8c7310f
Merge branch 'develop' into feat/encrypted-files
rodrigok 5228bdb
Add tests for new upload API
rodrigok 9e83634
Save encrypted content info to the file upload
rodrigok 8f81edd
Add dimensions to image attachments
rodrigok b9ff006
Fix TS
rodrigok 9a39914
Merge branch 'develop' into feat/encrypted-files
rodrigok 20962c4
Fix tests
rodrigok 74cfee1
Fix image preview
rodrigok 6508ebe
Prevent keys to be set on top of existent keys
rodrigok 1a1788e
Merge branch 'develop' into feat/encrypted-files
rodrigok 64a27cb
Fix API tests
rodrigok b5e1ba5
Fix e2ee change password
rodrigok f108fd4
Fix TS
rodrigok ae76481
Fix API tests
rodrigok 18d0e87
Decrypt room's last message correctly
rodrigok e984ad2
Merge remote-tracking branch 'origin/develop' into feat/encrypted-files
rodrigok c251e17
Merge branch 'develop' into feat/encrypted-files
rodrigok a96fa61
Try to fix tests
rodrigok 3f480b0
Merge branch 'develop' into feat/encrypted-files
rodrigok fa2456a
Fix tests
rodrigok 365cef8
Fix preview of encrypted files
rodrigok bd90357
Merge branch 'develop' into feat/encrypted-files
rodrigok 81dad69
Fix download button
rodrigok 8402305
Fix download from files list
rodrigok 503218e
Merge branch 'develop' into feat/encrypted-files
rodrigok 09e3bb7
Force cors on SW
rodrigok f6162af
Merge remote-tracking branch 'upstream/feat/encrypted-files' into fea…
abhipatel0211 b739659
feat: multiple file sharing feature with encryption
abhipatel0211 a1f7848
Merge remote-tracking branch 'upstream/develop' into e2e_multiple_mer…
abhipatel0211 74ed1f2
fix: file name issue
abhipatel0211 cbb41bb
Merge branch 'develop' into feat/multiple_files_in_one_msg
rodrigok c93da30
multiple files shared one at a time
abhipatel0211 cfc177c
Change message API to handle file upload
abhipatel0211 2e344a1
fix: Ensure correct preview of multiple images in shared in single me…
abhipatel0211 7f0b615
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 671fd31
solved merge conflict
abhipatel0211 8379c94
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 9a97c3d
fix: type error of fileContent and remove extra code
abhipatel0211 62fbc56
added support for single file upload
abhipatel0211 f88cd26
UI update added cross button on hover and added the functionality of …
abhipatel0211 f39042b
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 5a9f646
merge develop
abhipatel0211 771314e
feat: Added a file upload preview inside the messageBox
abhipatel0211 755c08b
Fix issue in uploads.ts causing duplicate messages on send
abhipatel0211 f2bd552
Cleanup: Remove unnecessary code
abhipatel0211 39ff2a3
removed unused space
abhipatel0211 23eb009
fix: lint errors
abhipatel0211 e786f70
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 f4b60d5
fix: lint and TS errors
abhipatel0211 1c0ddde
fix: ensure file handling as array to resolve type errors in uploads
abhipatel0211 f5213b0
fix: lint error and TS errors
abhipatel0211 6f398b4
fix: lint and TS errors
abhipatel0211 cdc0ff5
removed unused code
abhipatel0211 a1faa22
fix: reorder imports to fix ESLint errors and removed unused changes
abhipatel0211 326a197
fix: changed the variable name with camelCase and removed unwanted ch…
abhipatel0211 c078083
fix: changed variable names to cameCase
abhipatel0211 0e4d827
fix: added toast message while uploading file
abhipatel0211 60a80f9
Added the files to upload in the sendMessage in the executeSendMessage
abhipatel0211 7ac5841
fix: Revert back as using message API
abhipatel0211 9f74219
Removed unused import
abhipatel0211 9afeee6
Remove unwanted code
abhipatel0211 97f743b
Added defineProperty for all the files selected
abhipatel0211 68f45dc
Added different function for files and encrypted files sharing
abhipatel0211 d7b92cc
changed uploadFiles.ts and FileUploadModal.tsx to handle single file …
abhipatel0211 21005c0
Merge branch 'develop' into feat/multiple_files_in_one_msg
rodrigok a0f6c83
Added the type check for the filesToUpload and also removed the refer…
abhipatel0211 de319d8
Added isUploading and removed the unnecessary changes
abhipatel0211 3ad5e63
Added a folder of FilePreview near the messageBox and also changed th…
abhipatel0211 72bc00d
feat: Enable file attachments after typing a message
abhipatel0211 fbd30c9
Merge remote-tracking branch 'upstream/develop' into dev_feat/multipl…
abhipatel0211 fe2b428
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 b3db9fc
added title to the generic and image preview
abhipatel0211 3aa8c3d
fix: issue while sharing the message after file shared
abhipatel0211 2eb9b64
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 11aac8e
passed uploadIdsToConfirm to the sendMessage in executeSendMessage
abhipatel0211 9ff1b9f
Added newe function parseMultipleFilesIntoMessageAttachments
abhipatel0211 2370b14
added ui changes and also added the transition
abhipatel0211 47b592e
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 9722194
shifted confirm files at last after save message and attached multipl…
abhipatel0211 84bfcae
fix: image thumbnail display and remove extra msgData parameter
abhipatel0211 335e886
removed console logs
abhipatel0211 a5598f7
added a function for parse and also solved eslint error of reshuffling
abhipatel0211 7ea18d7
fix: solved lint errors messageBox and uploadfiles
abhipatel0211 822e2c5
fix: lint and TS errors
abhipatel0211 d1b6922
fix: lint error and converted description to msg
abhipatel0211 b13bdd2
fix: added description for TS error
abhipatel0211 a8cff84
Merge branch 'develop' into feat/multiple_files_in_one_msg
rodrigok 0fe3aee
Changed the location of parsing file into attachments and also added …
abhipatel0211 7347447
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 65c7be7
fix: maintain file upload order to ensure consistent fileId, fileUrl …
abhipatel0211 c4fb104
Added different function for file upload
abhipatel0211 12abfc5
removed unnecessary changes
abhipatel0211 ed463c0
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 8c91c8c
added file which upload the file and return back the file IDs and fil…
abhipatel0211 7e5081b
fix: added condition so it will remove extra space
abhipatel0211 e45e376
feat: Add drag-and-drop file upload to message box
abhipatel0211 d21dd7f
fix: added encryption of message also
abhipatel0211 8508954
fix: Issue inside the thread messages
abhipatel0211 ea689a2
fix: multiple dispatch messages
abhipatel0211 ce5b7dd
Merge branch 'feat/multiple_files_in_one_msg' into dev_feat/multiple_…
abhipatel0211 7a2324a
Merge remote-tracking branch 'upstream/develop' into dev_feat/multipl…
abhipatel0211 acdf3c1
removed onFileDrop as using setFilesToUpload
abhipatel0211 ca89baf
Merge branch 'develop' into dev_feat/multiple_files_in_one_msg
abhipatel0211 1ccc5f8
Merge branch 'develop' into feat/multiple_files_in_one_msg
abhipatel0211 724856b
Merge branch 'feat/multiple_files_in_one_msg' into dev_feat/multiple_…
abhipatel0211 f1ea0da
testing test
abhipatel0211 1d92433
Merge remote-tracking branch 'upstream/develop' into dev_feat/multipl…
abhipatel0211 8ce9034
return to old test
abhipatel0211 4437083
Merge remote-tracking branch 'upstream/develop' into dev_feat/multipl…
abhipatel0211 5f22315
fix: remove selected files when in edit mode
abhipatel0211 19df253
fix: diabled file sharing while editing
abhipatel0211 9d12bf6
Merge branch 'feat/multiple_files_in_one_msg' into dev_feat/multiple_…
abhipatel0211 71135f1
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 bbdd7a5
Merge branch 'develop' into feat/multiple_files_in_one_msg
abhipatel0211 ec6a12f
fix:TS_error_resolved
abhipatel0211 beb5723
Merge remote-tracking branch 'upstream/develop' into dev_feat/multipl…
abhipatel0211 d9a7452
Merge branch 'develop' into dev_feat/multiple_files_in_one_msg
abhipatel0211 176d676
Merge branch 'dev_feat/multiple_files_in_one_msg' into feat/multiple_…
abhipatel0211 056bfed
fix: Trans error
abhipatel0211 5dbdfc6
Merge branch 'develop' into dev_feat/multiple_files_in_one_msg
abhipatel0211 d68c421
Merge branch 'develop' into test_feat/multiple_files
abhipatel0211 11e6002
Merge branch 'develop' into feat/multiple_files_in_one_msg
abhipatel0211 d7e71b9
Merge branch 'develop' into dev_feat/multiple_files_in_one_msg
abhipatel0211 65e39c5
Merge branch 'develop' into test_feat/multiple_files
abhipatel0211 9fba829
Restore deleted subscriptions.ts file
abhipatel0211 945a224
Merge branch 'test_feat/multiple_files' into dev_feat/multiple_files_…
abhipatel0211 c060422
Merge branch 'dev_feat/multiple_files_in_one_msg' into feat/multiple_…
abhipatel0211 3cc6b17
Merge branch 'develop' into feat/multiple_files_in_one_msg
abhipatel0211 a89e0d7
Merge remote-tracking branch 'upstream/develop' into feat/multiple_fi…
abhipatel0211 08416f7
fix: merge conflict
abhipatel0211 fcc474e
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 8b176c7
feat: replace file preview
dougfabris 8db4e9d
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 007a5cc
fix: remove excessive state
dougfabris 94da580
feat: `MessageComposerFile`
dougfabris c565f4e
chore: upload API tweaks
dougfabris 7bf3b59
feat: `MessageComposerFile` loading and error
dougfabris 60b2262
chore: `RoomV2` not rendering attachments in composer
dougfabris e675268
chore: remove `UploadProgressIndicator`
dougfabris 22b981c
feat: limit number of files
dougfabris 0a001b9
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 6340dbf
feat: move file error validation to uploads.send
dougfabris 27464bb
feat: new endpoint to edit file name properly
dougfabris a11bfc0
refactor: UploadsStore
dougfabris 15237a2
feat: introduce threadUploads
dougfabris 2d7453e
chore: code cleanup
dougfabris eca7363
fix: remove `handleUploadFiles` from ThreadChat`
dougfabris 6f69c6c
fix: webdav upload flow
dougfabris 56da938
Merge branch 'develop' into feat/multiple_files_in_one_msg
rodrigok dd2839a
fix: unnecessary store clear
dougfabris 7f34a38
fix: `rooms.mediaEdit` review
dougfabris b1796d4
chore: remove unnecessary file
dougfabris 872f0c6
Fix some of my reviews
rodrigok da5dcf8
Fix last changes
rodrigok 565abe1
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 4b98e47
fix: some `rooms.mediaEdit` suggestions
dougfabris 6b8ab8e
fix: remove props from sendMessage
dougfabris c21b037
fix: remove description param from `uploadFile`
dougfabris a003a4f
fix: `rooms.mediaEdit` fileName param
dougfabris 40189e2
Fix some reviews
rodrigok 7ab58a2
refactor: upload API
dougfabris 7c6d0e4
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 70ba3de
chore: handle `confirmFiles` inside `sendMessage`
dougfabris 4c0be8e
chore: remove outdated unit test
dougfabris be927dd
chore: remove outdated translation
dougfabris c206d67
backend code improvements
pierre-lehnen-rc 931b595
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris bbfe281
chore: review tweaks
dougfabris 7bea8d8
test: add unit test for `rooms.mediaEdit`
dougfabris 3fe2d3b
test: adapt current e2e tests to the new behavior
dougfabris 726e6ac
chore: max multiple uploaded files rule
dougfabris d8a38e3
fix: uploading continuously action not cleaning after upload
dougfabris df671b6
fix: keep encryption when renaming file
dougfabris fbaa990
backend renaming of encrypted files
pierre-lehnen-rc 1635254
fix: encrypted message being send
dougfabris 481f921
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 33b659d
fix: remove `rooms.mediaEdit`
dougfabris 29404ae
chore: disable update button when form is not dirty
dougfabris af68ef2
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 7f50d02
fix: review
dougfabris cbff55d
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 447c08a
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 8bac67f
chore: changeset
dougfabris 769c798
chore: add comment to the ImageGallery workaround
dougfabris afaf266
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 26e9097
Merge branch 'develop' into feat/multiple_files_in_one_msg
ggazzo 788ee6c
Merge remote-tracking branch 'origin/develop' into feat/multiple_file…
ggazzo 4210798
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris c4a76fe
Merge branch 'develop' into feat/multiple_files_in_one_msg
rodrigok 23e9407
improvements to backend code
pierre-lehnen-rc e17fde6
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 720add4
fix: test locators
dougfabris 4286095
chore: update changeset
dougfabris e2b0cd8
i18n: missing translation
dougfabris 8790dee
fix: review
dougfabris eb94859
refactor: do not disable submit button when updating file name
dougfabris 43445e5
test: e2e-encryption
dougfabris dfa3435
test: wait large image request to send message
dougfabris b3e2541
fix: typo
dougfabris a96e873
i18n: remove unused translation
dougfabris 7c8cfbb
test: `image-upload`
dougfabris 822d1c1
test: quote-attachment
dougfabris 573d5c6
test: file-upload
dougfabris 21f11bf
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 6850713
fix: ts
dougfabris 230bc41
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 2934c06
fix: sendMessage filesToConfirm check
dougfabris cc55b16
chore: revert `rocketchat.e2e.room` changes
dougfabris a4f4f43
Merge remote-tracking branch 'origin/develop' into pr/abhipatel0211/3…
rodrigok 1f2cd49
test: fix outdated updated e2e tests
dougfabris 6b6f901
fix: change upload sequence
dougfabris 00415a5
fix: handle error of specific file in upload process
juliajforesti 8aabc84
feat: add modal confirmation for failed file uploads
juliajforesti 3bc60fc
test: add tests for handling multiple file uploads with failures
juliajforesti c556588
chore: display error message in file upload component tooltip
juliajforesti 91c5825
chore: add error feedback translations
juliajforesti 5688b08
test: add tests for multiple file uploads
juliajforesti 9a24a2e
feat: add configurable max files per message limit
ricardogarim 4e9d386
disable multi-file by default
pierre-lehnen-rc 9077bfb
save `file` attribute with the first file on the list
pierre-lehnen-rc dce346c
Merge branch 'develop' into feat/multiple_files_in_one_msg
juliajforesti 615c301
test: adjust composer locators
juliajforesti e450f82
test: adjust max files per message limit
ricardogarim 2dc7cc3
fix: delete all files when removing reported messages with multiple a…
ricardogarim 97f4868
test: update file composer methods to use new locator structure
juliajforesti 84dc860
test: reset `FileUpload_MaxFilesPerMessage` before and after tests
dougfabris 2dea937
chore: improve `MessageComposerFile` a11y with `aria-busy` and updat…
juliajforesti b3bd39f
fix: return public URLs for all files in message endpoint
ricardogarim 1dd6c3e
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris 654ec75
test: set maxFilesPerMessage to 2 for omni multi-file scenario
ricardogarim 5e81cf6
Merge branch 'develop' into feat/multiple_files_in_one_msg
juliajforesti 7b1567a
test: add test fot multifile upload in threads
juliajforesti 8314b0a
Merge branch 'develop' into feat/multiple_files_in_one_msg
dougfabris aa8a988
test: adjust input file locator
juliajforesti fefb435
chore: update snapshots
juliajforesti c41e08a
Merge branch 'develop' into feat/multiple_files_in_one_msg
juliajforesti d93c57e
test: adjust e2e and unit failing
juliajforesti File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| --- | ||
| '@rocket.chat/model-typings': minor | ||
| '@rocket.chat/core-typings': minor | ||
| '@rocket.chat/models': minor | ||
| '@rocket.chat/i18n': minor | ||
| '@rocket.chat/meteor': minor | ||
| --- | ||
|
|
||
| Introduces the ability to upload multiple files and send them in a single message |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
55 changes: 37 additions & 18 deletions
55
apps/meteor/app/utils/server/functions/normalizeMessageFileUpload.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,30 +1,49 @@ | ||
| import type { IMessage } from '@rocket.chat/core-typings'; | ||
| import { Uploads } from '@rocket.chat/models'; | ||
| import { isTruthy } from '@rocket.chat/tools'; | ||
|
|
||
| import { FileUpload } from '../../../file-upload/server'; | ||
| import { getURL } from '../getURL'; | ||
|
|
||
| const generateFileUploadData = async ( | ||
| message: Pick<IMessage, 'rid' | 'u'>, | ||
| fileId: string, | ||
| ): Promise<{ publicFilePath: string; type?: string; size?: number } | null> => { | ||
| const jwt = FileUpload.generateJWTToFileUrls({ | ||
| rid: message.rid, | ||
| userId: message.u._id, | ||
| fileId, | ||
| }); | ||
| const file = await Uploads.findOne({ _id: fileId }); | ||
| if (!file) { | ||
| return null; | ||
| } | ||
| return { | ||
| publicFilePath: file.name | ||
| ? getURL(`${FileUpload.getPath(`${file._id}/${encodeURI(file.name)}`).substring(1)}${jwt ? `?token=${jwt}` : ''}`, { | ||
| cdn: false, | ||
| full: true, | ||
| }) | ||
| : '', | ||
| type: file.type, | ||
| size: file.size, | ||
| }; | ||
| }; | ||
|
|
||
| export const normalizeMessageFileUpload = async (message: Omit<IMessage, '_updatedAt'>): Promise<Omit<IMessage, '_updatedAt'>> => { | ||
| // handle deprecated single file property for backward compatibility | ||
| if (message.file && !message.fileUpload) { | ||
| const jwt = FileUpload.generateJWTToFileUrls({ | ||
| rid: message.rid, | ||
| userId: message.u._id, | ||
| fileId: message.file._id, | ||
| }); | ||
| const file = await Uploads.findOne({ _id: message.file._id }); | ||
| if (!file) { | ||
| return message; | ||
| const fileUploadData = await generateFileUploadData(message, message.file._id); | ||
| if (fileUploadData) { | ||
| message.fileUpload = fileUploadData; | ||
| } | ||
| message.fileUpload = { | ||
| publicFilePath: file.name | ||
| ? getURL(`${FileUpload.getPath(`${file._id}/${encodeURI(file.name)}`).substring(1)}${jwt ? `?token=${jwt}` : ''}`, { | ||
| cdn: false, | ||
| full: true, | ||
| }) | ||
| : '', | ||
| type: file.type, | ||
| size: file.size, | ||
| }; | ||
| } | ||
|
|
||
| // handle multiple files | ||
| if (message.files?.length && !message.filesUpload) { | ||
| const filesUploadData = await Promise.all(message.files.map((file) => generateFileUploadData(message, file._id))); | ||
| message.filesUpload = filesUploadData.filter(isTruthy); | ||
| } | ||
|
|
||
| return message; | ||
| }; |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.