Skip to content

Commit b2f4ec8

Browse files
authored
Merge pull request #332 from antoine92190/vite
Web component migration
2 parents e3c794a + 81846a6 commit b2f4ec8

File tree

102 files changed

+48192
-101321
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+48192
-101321
lines changed

.eslintrc.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
module.exports = {
22
root: true,
33
env: {
4-
node: true
4+
es2021: true
55
},
6-
extends: ['standard', 'plugin:vue/recommended', '@vue/typescript'],
6+
extends: ['standard', 'plugin:vue/vue3-recommended', '@vue/typescript'],
7+
ignorePatterns: ['src/utils/lamejs/*.js'],
78
rules: {
89
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
910
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
@@ -23,6 +24,8 @@ module.exports = {
2324
'vue/html-indent': 'off',
2425
'space-before-function-paren': 'off',
2526
'vue/max-attributes-per-line': 'off',
27+
'vue/singleline-html-element-content-newline': 'off',
28+
'vue/no-v-html': 'off',
2629
'vue/html-self-closing': [
2730
'error',
2831
{

.github/workflows/build.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,3 @@ jobs:
2929
with:
3030
node-version: '16.x'
3131
- run: npm install
32-
- run: npm test

README.md

Lines changed: 103 additions & 151 deletions
Large diffs are not rendered by default.

babel.config.js

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

demo/.eslintrc.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
module.exports = {
22
root: true,
33
env: {
4-
node: true
4+
es2021: true
55
},
6-
extends: ['standard', 'plugin:vue/recommended'],
6+
extends: ['standard', 'plugin:vue/vue3-recommended'],
77
rules: {
88
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
99
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
@@ -22,6 +22,8 @@ module.exports = {
2222
'vue/html-indent': 'off',
2323
'space-before-function-paren': 'off',
2424
'vue/max-attributes-per-line': 'off',
25+
'vue/singleline-html-element-content-newline': 'off',
26+
'vue/no-deprecated-slot-attribute': 'off',
2527
'vue/html-self-closing': [
2628
'error',
2729
{
@@ -32,8 +34,5 @@ module.exports = {
3234
}
3335
}
3436
]
35-
},
36-
parserOptions: {
37-
parser: 'babel-eslint'
3837
}
3938
}

demo/babel.config.js

Lines changed: 0 additions & 5 deletions
This file was deleted.
File renamed without changes.

demo/public/index.html renamed to demo/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
<meta http-equiv="X-UA-Compatible" content="IE=edge">
66
<meta name="viewport" content="width=device-width,initial-scale=1.0">
7-
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
7+
<link rel="icon" href="/favicon.ico">
88
<title>vue-advanced-chat</title>
99
<link href="https://fonts.googleapis.com/css?family=Quicksand:300,400,500,700" rel="stylesheet">
1010
</head>
@@ -13,6 +13,6 @@
1313
<strong>We're sorry but vue-advanced-chat doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
1414
</noscript>
1515
<div id="app"></div>
16-
<!-- built files will be auto injected -->
16+
<script type="module" src="/src/main.js"></script>
1717
</body>
1818
</html>

demo/package.json

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,35 @@
11
{
22
"name": "demo",
3-
"version": "0.1.0",
3+
"version": "1.0.0",
44
"license": "MIT",
55
"description": "A beautiful chat rooms component made with Vue.js",
66
"author": "Antoine Dupont <antoindupontdev@gmail.com>",
77
"scripts": {
8-
"serve": "vue-cli-service serve",
9-
"s": "npm run serve",
10-
"build": "vue-cli-service build",
11-
"lint": "vue-cli-service lint",
8+
"dev": "vite",
9+
"build": "vite build",
10+
"serve": "vite preview",
11+
"s": "npm run dev",
12+
"lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src",
1213
"reset": "rm -rf node_modules && rm -rf package-lock.json && npm i",
1314
"reset-all": "npm run reset && cd .. && npm run reset",
1415
"gpages": "sh deploy.sh",
1516
"latest": "npm i https://github.com/antoine92190/vue-advanced-chat/tarball/master"
1617
},
1718
"dependencies": {
18-
"firebase": "^9.4.0",
19-
"vue": "^2.6.14",
20-
"vue-advanced-chat": "latest"
19+
"firebase": "9.4.0",
20+
"vue": "3.2.37",
21+
"vue-advanced-chat": "https://github.com/antoine92190/vue-advanced-chat/tarball/vite"
2122
},
2223
"devDependencies": {
23-
"@vue/cli-plugin-babel": "^4.5.13",
24-
"@vue/cli-plugin-eslint": "^4.5.13",
25-
"@vue/cli-service": "^4.5.13",
26-
"@vue/eslint-config-standard": "^4.0.0",
27-
"babel-eslint": "^10.0.3",
28-
"eslint": "^6.8.0",
29-
"eslint-plugin-vue": "^7.14.0",
30-
"node-sass": "^6.0.1",
31-
"sass-loader": "^10.1.1",
32-
"vue-template-compiler": "^2.6.14"
24+
"@babel/core": "7.12.16",
25+
"@vitejs/plugin-vue": "1.10.2",
26+
"@vue/compiler-sfc": "3.2.22",
27+
"@vue/eslint-config-standard": "4.0.0",
28+
"babel-eslint": "10.0.3",
29+
"eslint": "7.32.0",
30+
"eslint-plugin-vue": "8.0.3",
31+
"node-sass": "6.0.1",
32+
"vite": "2.9.14",
33+
"vue-loader": "16.8.3"
3334
}
3435
}

demo/src/ChatContainer.vue

Lines changed: 63 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -5,75 +5,72 @@
55
<button type="submit" :disabled="disableForm || !addRoomUsername">
66
Create Room
77
</button>
8-
<button class="button-cancel" @click="addNewRoom = false">
9-
Cancel
10-
</button>
8+
<button class="button-cancel" @click="addNewRoom = false">Cancel</button>
119
</form>
1210

1311
<form v-if="inviteRoomId" @submit.prevent="addRoomUser">
1412
<input v-model="invitedUsername" type="text" placeholder="Add username" />
1513
<button type="submit" :disabled="disableForm || !invitedUsername">
1614
Add User
1715
</button>
18-
<button class="button-cancel" @click="inviteRoomId = null">
19-
Cancel
20-
</button>
16+
<button class="button-cancel" @click="inviteRoomId = null">Cancel</button>
2117
</form>
2218

2319
<form v-if="removeRoomId" @submit.prevent="deleteRoomUser">
2420
<select v-model="removeUserId">
25-
<option default value="">
26-
Select User
27-
</option>
21+
<option default value="">Select User</option>
2822
<option v-for="user in removeUsers" :key="user._id" :value="user._id">
2923
{{ user.username }}
3024
</option>
3125
</select>
3226
<button type="submit" :disabled="disableForm || !removeUserId">
3327
Remove User
3428
</button>
35-
<button class="button-cancel" @click="removeRoomId = null">
36-
Cancel
37-
</button>
29+
<button class="button-cancel" @click="removeRoomId = null">Cancel</button>
3830
</form>
3931

40-
<chat-window
32+
<vue-advanced-chat
33+
ref="chatWindow"
4134
:height="screenHeight"
4235
:theme="theme"
43-
:styles="styles"
36+
:styles="JSON.stringify(styles)"
4437
:current-user-id="currentUserId"
4538
:room-id="roomId"
46-
:rooms="loadedRooms"
39+
:rooms="JSON.stringify(loadedRooms)"
4740
:loading-rooms="loadingRooms"
48-
:messages="messages"
49-
:messages-loaded="messagesLoaded"
5041
:rooms-loaded="roomsLoaded"
51-
:room-actions="roomActions"
52-
:menu-actions="menuActions"
53-
:message-selection-actions="messageSelectionActions"
42+
:messages="JSON.stringify(messages)"
43+
:messages-loaded="messagesLoaded"
5444
:room-message="roomMessage"
55-
:templates-text="templatesText"
45+
:room-actions="JSON.stringify(roomActions)"
46+
:menu-actions="JSON.stringify(menuActions)"
47+
:message-selection-actions="JSON.stringify(messageSelectionActions)"
48+
:templates-text="JSON.stringify(templatesText)"
5649
@fetch-more-rooms="fetchMoreRooms"
57-
@fetch-messages="fetchMessages"
58-
@send-message="sendMessage"
59-
@edit-message="editMessage"
60-
@delete-message="deleteMessage"
61-
@open-file="openFile"
62-
@open-user-tag="openUserTag"
63-
@add-room="addRoom"
64-
@room-action-handler="menuActionHandler"
65-
@menu-action-handler="menuActionHandler"
66-
@message-selection-action-handler="messageSelectionActionHandler"
67-
@send-message-reaction="sendMessageReaction"
68-
@typing-message="typingMessage"
69-
@toggle-rooms-list="$emit('show-demo-options', $event.opened)"
50+
@fetch-messages="fetchMessages($event.detail[0])"
51+
@send-message="sendMessage($event.detail[0])"
52+
@edit-message="editMessage($event.detail[0])"
53+
@delete-message="deleteMessage($event.detail[0])"
54+
@open-file="openFile($event.detail[0])"
55+
@open-user-tag="openUserTag($event.detail[0])"
56+
@add-room="addRoom($event.detail[0])"
57+
@room-action-handler="menuActionHandler($event.detail[0])"
58+
@menu-action-handler="menuActionHandler($event.detail[0])"
59+
@message-selection-action-handler="
60+
messageSelectionActionHandler($event.detail[0])
61+
"
62+
@send-message-reaction="sendMessageReaction($event.detail[0])"
63+
@typing-message="typingMessage($event.detail[0])"
64+
@toggle-rooms-list="$emit('show-demo-options', $event.detail[0].opened)"
7065
>
71-
<!-- <template #emoji-picker="{ emojiOpened, addEmoji }">
72-
<button @click="addEmoji({ unicode: '😁' })">
73-
{{ emojiOpened }}
74-
</button>
75-
</template> -->
76-
</chat-window>
66+
<!-- <div
67+
v-for="message in messages"
68+
:slot="'message_' + message._id"
69+
:key="message._id"
70+
>
71+
New message container
72+
</div> -->
73+
</vue-advanced-chat>
7774
</div>
7875
</template>
7976

@@ -82,18 +79,14 @@ import * as firestoreService from '@/database/firestore'
8279
import * as firebaseService from '@/database/firebase'
8380
import * as storageService from '@/database/storage'
8481
import { parseTimestamp, formatTimestamp } from '@/utils/dates'
82+
import logoAvatar from '@/assets/logo.png'
8583
86-
import ChatWindow from './../../src/lib/ChatWindow'
87-
// import ChatWindow, { Rooms } from 'vue-advanced-chat'
88-
// import ChatWindow from 'vue-advanced-chat'
89-
// import 'vue-advanced-chat/dist/vue-advanced-chat.css'
90-
// import ChatWindow from './../../dist/vue-advanced-chat.umd.min.js'
84+
import { register } from 'vue-advanced-chat'
85+
// import { register } from './../../dist/vue-advanced-chat.es.js'
86+
// import { register } from './../../src/lib/index.js'
87+
register()
9188
9289
export default {
93-
components: {
94-
ChatWindow
95-
},
96-
9790
props: {
9891
currentUserId: { type: String, required: true },
9992
theme: { type: String, required: true },
@@ -143,6 +136,7 @@ export default {
143136
{ name: 'deleteRoom', title: 'Delete Room' }
144137
],
145138
messageSelectionActions: [{ name: 'deleteMessages', title: 'Delete' }],
139+
// eslint-disable-next-line vue/no-unused-properties
146140
styles: { container: { borderRadius: '4px' } },
147141
templatesText: [
148142
{
@@ -172,11 +166,21 @@ export default {
172166
},
173167
174168
mounted() {
169+
this.addCss()
170+
175171
this.fetchRooms()
176172
firebaseService.updateUserOnlineStatus(this.currentUserId)
177173
},
178174
179175
methods: {
176+
async addCss() {
177+
if (import.meta.env.MODE === 'development') {
178+
const styles = await import('./../../src/styles/index.scss')
179+
const style = document.createElement('style')
180+
style.innerHTML = styles.default
181+
this.$refs.chatWindow.shadowRoot.appendChild(style)
182+
}
183+
},
180184
resetRooms() {
181185
this.loadingRooms = true
182186
this.loadingLastMessageByRoom = 0
@@ -268,7 +272,7 @@ export default {
268272
const roomAvatar =
269273
roomContacts.length === 1 && roomContacts[0].avatar
270274
? roomContacts[0].avatar
271-
: require('@/assets/logo.png')
275+
: logoAvatar
272276
273277
formattedRooms.push({
274278
...room,
@@ -342,6 +346,7 @@ export default {
342346
return {
343347
...message,
344348
...{
349+
_id: message.id,
345350
content,
346351
senderId: message.sender_id,
347352
timestamp: formatTimestamp(
@@ -354,7 +359,11 @@ export default {
354359
new:
355360
message.sender_id !== this.currentUserId &&
356361
(!message.seen || !message.seen[this.currentUserId]),
357-
lastMessage: { ...message.lastMessage, senderId: message.sender_id }
362+
lastMessage: {
363+
...message.lastMessage,
364+
_id: message.id,
365+
senderId: message.sender_id
366+
}
358367
}
359368
}
360369
},
@@ -364,7 +373,6 @@ export default {
364373
365374
if (options.reset) {
366375
this.resetMessages()
367-
this.roomId = room.roomId
368376
}
369377
370378
if (this.previousLastLoadedMessage && !this.lastLoadedMessage) {
@@ -381,7 +389,9 @@ export default {
381389
if (this.selectedRoom !== room.roomId) return
382390
383391
if (data.length === 0 || data.length < this.messagesPerPage) {
384-
setTimeout(() => (this.messagesLoaded = true), 0)
392+
setTimeout(() => {
393+
this.messagesLoaded = true
394+
}, 0)
385395
}
386396
387397
if (options.reset) this.messages = []

0 commit comments

Comments
 (0)