Files
DLE/frontend/src/views/HomeView.vue

105 lines
3.8 KiB
Vue

<template>
<BaseLayout
:is-authenticated="isAuthenticated"
:identities="identities"
:token-balances="tokenBalances"
:is-loading-tokens="isLoadingTokens"
@auth-action-completed="$emit('auth-action-completed')"
>
<ChatInterface
:messages="messages"
:is-loading="isLoading || isConnectingWallet"
:has-more-messages="messageLoading.hasMoreMessages"
v-model:newMessage="newMessage"
v-model:attachments="attachments"
@send-message="handleSendMessage"
@load-more="loadMessages"
/>
</BaseLayout>
</template>
<script setup>
import { ref, onMounted, watch, onBeforeUnmount, defineProps, defineEmits } from 'vue';
import { useAuth } from '../composables/useAuth';
import { useChat } from '../composables/useChat';
import { connectWithWallet } from '../services/wallet';
import eventBus from '../utils/eventBus';
import BaseLayout from '../components/BaseLayout.vue';
import ChatInterface from '../components/ChatInterface.vue';
console.log('HomeView.vue: Using BaseLayout');
// Определяем props, переданные из App.vue через RouterView
const props = defineProps({
isAuthenticated: Boolean,
identities: Array,
tokenBalances: Object,
isLoadingTokens: Boolean
});
// Определяем emits
const emit = defineEmits(['auth-action-completed']);
// =====================================================================
// 1. ИСПОЛЬЗОВАНИЕ COMPOSABLES
// =====================================================================
const auth = useAuth();
// =====================================================================
// 2. СОСТОЯНИЯ КОМПОНЕНТА
// =====================================================================
const isConnectingWallet = ref(false); // Флаг для процесса подключения кошелька
// =====================================================================
// 3. ИСПОЛЬЗОВАНИЕ ЧАТА
// =====================================================================
const {
messages,
newMessage,
attachments,
isLoading,
messageLoading,
loadMessages,
handleSendMessage,
} = useChat(auth);
// =====================================================================
// 4. ЖИЗНЕННЫЙ ЦИКЛ
// =====================================================================
let unsubscribe = null;
onMounted(() => {
console.log('[HomeView] Компонент загружен (обновленная версия)');
// Подписка на события авторизации
unsubscribe = eventBus.on('auth-state-changed', handleAuthEvent);
});
onBeforeUnmount(() => {
// Отписка от события при удалении компонента
if (unsubscribe) {
unsubscribe();
}
});
// =====================================================================
// 5. ОБРАБОТКА СОБЫТИЙ АВТОРИЗАЦИИ
// =====================================================================
// Функция обновления сообщений после авторизации
const handleAuthEvent = (eventData) => {
console.log('[HomeView] Получено событие изменения авторизации:', eventData);
if (eventData.isAuthenticated) {
// Пользователь только что авторизовался - загрузим сообщения
loadMessages({ initial: true, authType: eventData.authType || 'wallet' });
} else {
// Пользователь вышел из системы - можно очистить или обновить данные
loadMessages({ initial: true });
}
};
</script>