Skip to content

Commit 1acee91

Browse files
committed
(refacto) move media preview to root
1 parent 723afed commit 1acee91

File tree

7 files changed

+109
-139
lines changed

7 files changed

+109
-139
lines changed

src/lib/ChatWindow.vue

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@
5959
:scroll-distance="scrollDistance"
6060
:accepted-files="acceptedFiles"
6161
:templates-text="templatesText"
62-
:media-modal-preview="mediaModalPreview"
63-
@toggle-rooms-list="toggleRoomsList"
62+
@toggle-rooms-list="toggleRoomsList"
6463
@room-info="roomInfo"
6564
@fetch-messages="fetchMessages"
6665
@send-message="sendMessage"
@@ -79,12 +78,18 @@
7978
</template>
8079
</room>
8180
</div>
81+
<media-preview
82+
v-if="showMediaModal"
83+
:file="filePreview"
84+
@close-file-modal="showMediaModal = false"
85+
/>
8286
</div>
8387
</template>
8488

8589
<script>
8690
import RoomsList from './RoomsList/RoomsList'
8791
import Room from './Room/Room'
92+
import MediaPreview from './MediaPreview/MediaPreview'
8893
8994
import locales from '../locales'
9095
import { defaultThemeStyles, cssThemeVars } from '../themes'
@@ -97,7 +102,8 @@ export default {
97102
name: 'ChatContainer',
98103
components: {
99104
RoomsList,
100-
Room
105+
Room,
106+
MediaPreview
101107
},
102108
103109
props: {
@@ -160,8 +166,8 @@ export default {
160166
scrollDistance: { type: Number, default: 60 },
161167
acceptedFiles: { type: String, default: '*' },
162168
templatesText: { type: Array, default: null },
163-
mediaModalPreview: { type: Boolean, default: true }
164-
},
169+
mediaModalPreview: { type: Boolean, default: true }
170+
},
165171
166172
emits: [
167173
'toggle-rooms-list',
@@ -187,7 +193,11 @@ export default {
187193
room: {},
188194
loadingMoreRooms: false,
189195
showRoomsList: true,
190-
isMobile: false
196+
isMobile: false,
197+
showMediaModal: false,
198+
filePreview: {
199+
url: ''
200+
}
191201
}
192202
},
193203
@@ -329,7 +339,12 @@ export default {
329339
this.$emit('delete-message', { message, roomId: this.room.roomId })
330340
},
331341
openFile({ message, file }) {
332-
this.$emit('open-file', { message, file })
342+
if (this.mediaModalPreview && file.action === 'preview') {
343+
this.filePreview = file.file
344+
this.showMediaModal = true
345+
} else {
346+
this.$emit('open-file', { message, file })
347+
}
333348
},
334349
openUserTag({ user }) {
335350
this.$emit('open-user-tag', { user })
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
.vac-room-file-preview {
2+
position: absolute;
3+
top: 0;
4+
left: 0;
5+
width: 100%;
6+
height: 100%;
7+
z-index: 11;
8+
background-color: rgba(0, 0, 0, 0.5);
9+
10+
.vac-room-file-preview-container {
11+
width: 100%;
12+
height: 100%;
13+
}
14+
15+
.vac-image-preview {
16+
width: 100%;
17+
height: 100%;
18+
background-size: contain !important;
19+
background-repeat: no-repeat;
20+
background-position: center;
21+
}
22+
}

src/lib/MediaPreview/MediaPreview.vue

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<template>
2+
<div class="vac-room-file-preview">
3+
<div
4+
v-if="isImage"
5+
class="vac-room-file-preview-container"
6+
@click.stop="$emit('close-file-modal')"
7+
@keypress.esc="$emit('close-file-modal')"
8+
>
9+
<div
10+
class="vac-image-preview"
11+
:style="{
12+
'background-image': `url('${file.url}')`
13+
}"
14+
@keypress.esc="$emit('close-file-modal')"
15+
/>
16+
</div>
17+
18+
<div
19+
v-else-if="isVideo"
20+
class="vac-video-preview"
21+
@keypress.esc="$emit('close-file-modal')"
22+
>
23+
<video width="100%" height="100%" controls>
24+
<source :src="file.url" />
25+
</video>
26+
</div>
27+
<button @click="$emit('close-file-modal')">
28+
Close
29+
</button>
30+
</div>
31+
</template>
32+
<script>
33+
// import SvgIcon from '../../../components/SvgIcon/SvgIcon'
34+
35+
const { isImageFile, isVideoFile } = require('../../utils/media-file')
36+
37+
export default {
38+
name: 'RoomFilePreview',
39+
components: {
40+
// SvgIcon,
41+
},
42+
43+
props: {
44+
file: { type: Object, required: true }
45+
},
46+
47+
emits: ['open-file'],
48+
49+
computed: {
50+
isImage() {
51+
return isImageFile(this.file)
52+
},
53+
isVideo() {
54+
if (this.file.url) return isVideoFile(this.file)
55+
else return false
56+
}
57+
}
58+
}
59+
</script>

src/lib/Room/Room.vue

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@
297297
</div>
298298
</div>
299299
</div>
300-
<RoomFilePreview v-show="showMediaModal" :file="mediaModal" :current-user-id="currentUserId" @close-file-modal="showMediaModal=false"/>
301300
</div>
302301
</template>
303302

@@ -315,7 +314,6 @@ import RoomMessageReply from './RoomMessageReply/RoomMessageReply'
315314
import RoomUsersTag from './RoomUsersTag/RoomUsersTag'
316315
import RoomEmojis from './RoomEmojis/RoomEmojis'
317316
import RoomTemplatesText from './RoomTemplatesText/RoomTemplatesText'
318-
import RoomFilePreview from './RoomFilePreview/RoomFilePreview'
319317
import Message from '../Message/Message'
320318
321319
import filteredItems from '../../utils/filter-items'
@@ -345,8 +343,7 @@ export default {
345343
RoomUsersTag,
346344
RoomEmojis,
347345
RoomTemplatesText,
348-
Message,
349-
RoomFilePreview
346+
Message
350347
},
351348
352349
directives: {
@@ -383,8 +380,7 @@ export default {
383380
roomInfoEnabled: { type: Boolean, required: true },
384381
textareaActionEnabled: { type: Boolean, required: true },
385382
scrollDistance: { type: Number, required: true },
386-
templatesText: { type: Array, default: null },
387-
mediaModalPreview: { type: Boolean, default: true }
383+
templatesText: { type: Array, default: null }
388384
},
389385
390386
emits: [
@@ -436,11 +432,7 @@ export default {
436432
emojisDB: new Database(),
437433
recorder: this.initRecorder(),
438434
isRecording: false,
439-
format: 'mp3',
440-
showMediaModal: false,
441-
mediaModal: {
442-
url: ''
443-
}
435+
format: 'mp3'
444436
}
445437
},
446438
@@ -1211,12 +1203,7 @@ export default {
12111203
}
12121204
},
12131205
openFile({ message, file }) {
1214-
if (this.mediaModalPreview && file.action === 'preview') {
1215-
this.showMediaModal = true
1216-
this.mediaModal = Object.assign({}, this.imageModal, file.file)
1217-
} else {
1218-
this.$emit('open-file', { message, file })
1219-
}
1206+
this.$emit('open-file', { message, file })
12201207
},
12211208
openUserTag(user) {
12221209
this.$emit('open-user-tag', user)

src/lib/Room/RoomFilePreview/RoomFilePreview.scss

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/lib/Room/RoomFilePreview/RoomFilePreview.vue

Lines changed: 0 additions & 94 deletions
This file was deleted.

src/styles/index.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
@import '../lib/ChatWindow';
66

7+
@import '../lib/MediaPreview/MediaPreview';
8+
79
@import '../lib/Room/Room';
810
@import '../lib/Room/RoomEmojis/RoomEmojis';
911
@import '../lib/Room/RoomHeader/RoomHeader';
@@ -12,7 +14,6 @@
1214
@import '../lib/Room/RoomFiles/RoomFile/RoomFile';
1315
@import '../lib/Room/RoomUsersTag/RoomUsersTag';
1416
@import '../lib/Room/RoomTemplatesText/RoomTemplatesText';
15-
@import '../lib/Room/RoomFilePreview/RoomFilePreview';
1617

1718
@import '../lib/RoomsList/RoomsList';
1819
@import '../lib/RoomsList/RoomContent/RoomContent';

0 commit comments

Comments
 (0)