diff --git a/app/soapbox/features/chats/components/chat_box.js b/app/soapbox/features/chats/components/chat_box.js
index 8a3569221..4467c9656 100644
--- a/app/soapbox/features/chats/components/chat_box.js
+++ b/app/soapbox/features/chats/components/chat_box.js
@@ -12,8 +12,8 @@ import {
} from 'soapbox/actions/chats';
import { uploadMedia } from 'soapbox/actions/media';
import IconButton from 'soapbox/components/icon_button';
+import UploadProgress from 'soapbox/features/compose/components/upload-progress';
import UploadButton from 'soapbox/features/compose/components/upload_button';
-import UploadProgress from 'soapbox/features/compose/components/upload_progress';
import { truncateFilename } from 'soapbox/utils/media';
import ChatMessageList from './chat_message_list';
diff --git a/app/soapbox/features/compose/components/upload-progress.tsx b/app/soapbox/features/compose/components/upload-progress.tsx
new file mode 100644
index 000000000..1c891653e
--- /dev/null
+++ b/app/soapbox/features/compose/components/upload-progress.tsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import { FormattedMessage } from 'react-intl';
+import { spring } from 'react-motion';
+
+import { HStack, Icon, Stack, Text } from 'soapbox/components/ui';
+import { useAppSelector } from 'soapbox/hooks';
+
+import Motion from '../../ui/util/optional_motion';
+
+const UploadProgress = () => {
+ const active = useAppSelector((state) => state.compose.get('is_uploading'));
+ const progress = useAppSelector((state) => state.compose.get('progress'));
+
+ if (!active) {
+ return null;
+ }
+
+ return (
+