diff --git a/package-lock.json b/package-lock.json index e685aaf..e097d17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,8 @@ "primevue": "^4.5.4", "tailwindcss": "^4.2.1", "tailwindcss-primeui": "^0.6.1", - "vue": "^3.5.28" + "vue": "^3.5.28", + "vuetify": "^4.0.0" }, "devDependencies": { "@mdi/font": "^7.4.47", @@ -5841,6 +5842,33 @@ "typescript": ">=5.0.0" } }, + "node_modules/vuetify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-4.0.0.tgz", + "integrity": "sha512-TRyNWd2KlX1KXbKwuHYRfrX24yLHq85AdVKmokfy5llAgVx7MNW4oBPwFmYLeuuSrWvw5ITtDJ5VjdBIKD5WVw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/johnleider" + }, + "peerDependencies": { + "typescript": ">=4.7", + "vite-plugin-vuetify": ">=2.1.0", + "vue": "^3.5.0", + "webpack-plugin-vuetify": ">=3.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vite-plugin-vuetify": { + "optional": true + }, + "webpack-plugin-vuetify": { + "optional": true + } + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 88423f3..78dd5f4 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "primevue": "^4.5.4", "tailwindcss": "^4.2.1", "tailwindcss-primeui": "^0.6.1", - "vue": "^3.5.28" + "vue": "^3.5.28", + "vuetify": "^4.0.0" }, "devDependencies": { "@mdi/font": "^7.4.47", diff --git a/src/App.vue b/src/App.vue index 5630a13..fef64b9 100644 --- a/src/App.vue +++ b/src/App.vue @@ -2,17 +2,15 @@ import { useAuthStore } from '@/stores/auth.ts' import SignInView from '@/views/SignInView.vue' import MainView from '@/views/MainView.vue' -import TestView from '@/views/TestView.vue' const authStore = useAuthStore() diff --git a/src/assets/main.css b/src/assets/main.css index a985a04..e318112 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -1,14 +1,9 @@ @import "tailwindcss"; -@import "tailwindcss-primeui"; -@import "primeicons/primeicons.css"; html { - font-size: 13px; + font-size: 14px; font-weight: 400; font-family: "Montserrat", sans-serif; font-optical-sizing: auto; font-style: normal; } - -.p-component, .p-component * { -} diff --git a/src/assets/main_.css b/src/assets/main_.css new file mode 100644 index 0000000..68ed767 --- /dev/null +++ b/src/assets/main_.css @@ -0,0 +1,13 @@ +@import "tailwindcss"; +@import "tailwindcss-primeui"; +@import "primeicons/primeicons.css"; + +html { + font-size: 13px; + font-weight: 400; + font-family: "Montserrat", sans-serif; + font-optical-sizing: auto; + font-style: normal; +} + +.p-component, .p-component * {} diff --git a/src/components/ChatListElement.vue b/src/components/ChatListElement.vue index 8e7caf4..1adc2bf 100644 --- a/src/components/ChatListElement.vue +++ b/src/components/ChatListElement.vue @@ -9,32 +9,44 @@ interface Props { const { chat } = defineProps() const authStore = useAuthStore() -const chatsStore = useChatsStore() -const getChatName = computed(() => { - if (chat.type_id === 2) { - return chat.name - } else if (chat.type_id === 1) { - const otherUsers = chat.users.filter((user) => user.id !== authStore.me?.id) - return otherUsers[0]?.name ?? otherUsers[0]?.email ?? 'unknown' +const chatName = computed(() => { + switch (chat.type_id) { + case 1: + const otherUsers = chat.users.filter((user) => user.id !== authStore.me?.id) + return otherUsers[0]?.name ?? otherUsers[0]?.email ?? 'unknown' + case 2: + return chat.name + default: + return 'chat' } - - return 'unknown ID' }) -const isSelected = computed(() => { - return chatsStore.selected === chat.id +const avatarText = computed(() => { + return chatName.value.slice(0, 1).toUpperCase() +}) + +const lastMessageCreatedAt = computed(() => { + return new Date().toLocaleTimeString('ru-RU', { timeStyle: 'short' }) }) diff --git a/src/components/Chats/ChatsList.vue b/src/components/Chats/ChatsList.vue index e623a5f..d0db270 100644 --- a/src/components/Chats/ChatsList.vue +++ b/src/components/Chats/ChatsList.vue @@ -2,12 +2,24 @@ import { useChatsStore } from '@/stores/chats.ts' import { SocketDataReq, useSocketsStore } from '@/stores/sockets.ts' import ChatListElement from '@/components/ChatListElement.vue' -import { onMounted, watchEffect } from 'vue' +import { onMounted, ref, watch, watchEffect } from 'vue' +import { type SelectedMenu, useMenuStore } from '@/stores/menu.ts' const chatsStore = useChatsStore() const socketsStore = useSocketsStore() +const menuStore = useMenuStore() +const selected = ref() +const menu = ref() watchEffect(() => getMessages(chatsStore.selected)) +watch(selected, (val) => { + if (val) chatsStore.selected = val[0] +}) + +watch(menu, (val) => { + console.log(val) + if (val) menuStore.selected = val[0] as SelectedMenu +}) function getMessages(chatId?: string) { if (!chatId) return @@ -17,28 +29,36 @@ function getMessages(chatId?: string) { }) } -function onSelect(id: string) { - chatsStore.selected = id -} - onMounted(() => console.log('CHAT LIST')) diff --git a/src/components/LeftPane.vue b/src/components/LeftPane.vue index ef84149..f69348e 100644 --- a/src/components/LeftPane.vue +++ b/src/components/LeftPane.vue @@ -39,7 +39,7 @@ function getChatName(chat: Chat) { diff --git a/src/components/RightPane.vue b/src/components/RightPane.vue index f95d0be..c696e04 100644 --- a/src/components/RightPane.vue +++ b/src/components/RightPane.vue @@ -30,7 +30,7 @@ watch(messages, async () => {