implement_message_in_code_only
This commit is contained in:
parent
7e0eb4d450
commit
3ecbe0da24
@ -9,21 +9,21 @@ declare global {
|
|||||||
import { groupsMock } from '../../mocks/mock-signature/groupsMock';
|
import { groupsMock } from '../../mocks/mock-signature/groupsMock';
|
||||||
import { messagesMock as initialMessagesMock, messagesMock } from '../../mocks/mock-signature/messagesMock';
|
import { messagesMock as initialMessagesMock, messagesMock } from '../../mocks/mock-signature/messagesMock';
|
||||||
import { membersMock } from '../../mocks/mock-signature/membersMocks';
|
import { membersMock } from '../../mocks/mock-signature/membersMocks';
|
||||||
|
import { ApiReturn, Device, Member } from '../../../pkg/sdk_client';
|
||||||
import {
|
import {
|
||||||
Message,
|
Message,
|
||||||
DocumentSignature,
|
DocumentSignature,
|
||||||
} from '../../models/signature.models';
|
} from '../../models/signature.models';
|
||||||
import { messageStore } from '../../utils/messageMock';
|
import { messageStore } from '../../utils/messageMock';
|
||||||
import { Member } from '../../interface/memberInterface';
|
|
||||||
import { Group } from '../../interface/groupInterface';
|
import { Group } from '../../interface/groupInterface';
|
||||||
import { getCorrectDOM } from '../../utils/document.utils';
|
import { getCorrectDOM } from '../../utils/document.utils';
|
||||||
import chatStyle from '../../../public/style/chat.css?inline';
|
import chatStyle from '../../../public/style/chat.css?inline';
|
||||||
import { addressToEmoji } from '../../utils/sp-address.utils';
|
import { addressToEmoji } from '../../utils/sp-address.utils';
|
||||||
|
import Database from '../../services/database.service';
|
||||||
|
|
||||||
|
const storageUrl = `/storage`;
|
||||||
|
|
||||||
|
|
||||||
let currentUser: Member = membersMock[0];
|
|
||||||
|
|
||||||
interface LocalNotification {
|
interface LocalNotification {
|
||||||
memberId: string;
|
memberId: string;
|
||||||
text: string;
|
text: string;
|
||||||
@ -44,6 +44,7 @@ class ChatElement extends HTMLElement {
|
|||||||
return ['process-id'];
|
return ['process-id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private sdkClient: any;
|
||||||
private processId: string | null = null;
|
private processId: string | null = null;
|
||||||
private selectedMemberId: string | null = null;
|
private selectedMemberId: string | null = null;
|
||||||
private messagesMock: any[] = [];
|
private messagesMock: any[] = [];
|
||||||
@ -107,7 +108,6 @@ class ChatElement extends HTMLElement {
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
window.toggleUserList = this.toggleUserList.bind(this);
|
window.toggleUserList = this.toggleUserList.bind(this);
|
||||||
window.switchUser = this.switchUser.bind(this);
|
|
||||||
window.loadMemberChat = this.loadMemberChat.bind(this);
|
window.loadMemberChat = this.loadMemberChat.bind(this);
|
||||||
|
|
||||||
// Initialiser les événements de notification
|
// Initialiser les événements de notification
|
||||||
@ -217,6 +217,102 @@ class ChatElement extends HTMLElement {
|
|||||||
this.updateNotificationBadge();
|
this.updateNotificationBadge();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public isPaired(): boolean {
|
||||||
|
try {
|
||||||
|
return this.sdkClient.is_paired();
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(`isPaired ~ Error: ${e}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async createMessagingProcess(otherMembers: Member[],relayAddress: string, feeRate: number): Promise<ApiReturn> {
|
||||||
|
if (!this.isPaired()) {
|
||||||
|
throw new Error('Device not paired');
|
||||||
|
}
|
||||||
|
const me = await this.getMemberFromDevice();
|
||||||
|
if (!me) {
|
||||||
|
throw new Error('No paired member in device');
|
||||||
|
}
|
||||||
|
const allMembers: Member[] = otherMembers;
|
||||||
|
allMembers.push({ sp_addresses: me });
|
||||||
|
const meAndOne = [{ sp_addresses: me }, otherMembers.pop()!];
|
||||||
|
const everyOneElse = otherMembers;
|
||||||
|
const messagingTemplate = {
|
||||||
|
description: 'messaging',
|
||||||
|
roles: {
|
||||||
|
public: {
|
||||||
|
members: allMembers,
|
||||||
|
validation_rules: [
|
||||||
|
{
|
||||||
|
quorum: 0.0,
|
||||||
|
fields: ['description', 'roles'],
|
||||||
|
min_sig_member: 0.0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
storages: [storageUrl]
|
||||||
|
},
|
||||||
|
owner: {
|
||||||
|
members: meAndOne,
|
||||||
|
validation_rules: [
|
||||||
|
{
|
||||||
|
quorum: 1.0,
|
||||||
|
fields: ['description', 'roles'],
|
||||||
|
min_sig_member: 1.0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
storages: [storageUrl]
|
||||||
|
},
|
||||||
|
users: {
|
||||||
|
members: everyOneElse,
|
||||||
|
validation_rules: [
|
||||||
|
{
|
||||||
|
quorum: 0.0,
|
||||||
|
fields: ['description', 'roles'],
|
||||||
|
min_sig_member: 0.0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
storages: [storageUrl]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
return this.sdkClient.create_new_process(JSON.stringify(messagingTemplate), null, relayAddress, feeRate);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(`Creating process failed: ${e}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getMemberFromDevice(): Promise<string[] | null> {
|
||||||
|
try {
|
||||||
|
const device = await this.getDeviceFromDatabase();
|
||||||
|
if (device) {
|
||||||
|
const parsed: Device = JSON.parse(device);
|
||||||
|
const pairedMember = parsed['paired_member'];
|
||||||
|
return pairedMember.sp_addresses;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(`Failed to retrieve paired_member from device: ${e}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async getDeviceFromDatabase(): Promise<string | null> {
|
||||||
|
const db = await Database.getInstance();
|
||||||
|
const walletStore = 'wallet';
|
||||||
|
try {
|
||||||
|
const dbRes = await db.getObject(walletStore, '1');
|
||||||
|
if (dbRes) {
|
||||||
|
const wallet = dbRes['device'];
|
||||||
|
return wallet;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(`Failed to retrieve device from db: ${e}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Send a messsage
|
// Send a messsage
|
||||||
private sendMessage() {
|
private sendMessage() {
|
||||||
const messageInput = this.shadowRoot?.querySelector('#message-input') as HTMLInputElement;
|
const messageInput = this.shadowRoot?.querySelector('#message-input') as HTMLInputElement;
|
||||||
@ -534,27 +630,6 @@ class ChatElement extends HTMLElement {
|
|||||||
(userList as HTMLElement).classList.toggle('show');
|
(userList as HTMLElement).classList.toggle('show');
|
||||||
}
|
}
|
||||||
|
|
||||||
private switchUser(userId: string | number) {
|
|
||||||
const user = membersMock.find(member => member.id === userId);
|
|
||||||
if (!user) return;
|
|
||||||
currentUser = user;
|
|
||||||
this.updateCurrentUserDisplay();
|
|
||||||
const userList = getCorrectDOM('userList') as HTMLElement;
|
|
||||||
userList?.classList.remove('show');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function to update the display of the current user
|
|
||||||
private updateCurrentUserDisplay() {
|
|
||||||
const userDisplay = getCorrectDOM('current-user') as HTMLElement;
|
|
||||||
if (userDisplay) {
|
|
||||||
userDisplay.innerHTML = `
|
|
||||||
<div class="current-user-info">
|
|
||||||
<span class="user-avatar">${currentUser.avatar}</span>
|
|
||||||
<span class="user-name">${currentUser.name}</span>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Generate an automatic response
|
// Generate an automatic response
|
||||||
private generateAutoReply(senderName: string): Message {
|
private generateAutoReply(senderName: string): Message {
|
||||||
return {
|
return {
|
||||||
@ -599,7 +674,6 @@ class ChatElement extends HTMLElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
connectedCallback() {
|
connectedCallback() {
|
||||||
this.updateCurrentUserDisplay();
|
|
||||||
|
|
||||||
if (this.processId) {
|
if (this.processId) {
|
||||||
console.log('🔍 Loading chat with process ID:', this.processId);
|
console.log('🔍 Loading chat with process ID:', this.processId);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user