90 lines
2.9 KiB
TypeScript
90 lines
2.9 KiB
TypeScript
import {Component, inject, OnInit, signal} from '@angular/core';
|
|
import {ActivatedRoute, Router, RouterLink, RouterOutlet} from '@angular/router';
|
|
import {Chat} from '@chatenium/chatenium-sdk/domain/chatService.schema';
|
|
import {Message} from '@chatenium/chatenium-sdk/domain/dmService.schema';
|
|
import {MessageBoxViewModel} from '../elements/message-box/message-box-viewmodel';
|
|
import {DmStorage, NetworkStorage, ServiceManager} from '../../service-manager';
|
|
import {DMService} from '@chatenium/chatenium-sdk/services/dmService';
|
|
import {Network as NetworkData} from "@chatenium/chatenium-sdk/domain/networkService.schema"
|
|
import {NetworkService} from '@chatenium/chatenium-sdk/services/networkService';
|
|
import {IndexedDB} from '../../storage/indexed-db';
|
|
import {Navbar} from '../elements/navbar/navbar';
|
|
import {Oimg} from '../elements/oimg/oimg';
|
|
import {TUI_BREAKPOINT, TuiButton, TuiGroup, TuiIcon} from '@taiga-ui/core';
|
|
import {TuiTab, TuiTabsHorizontal, TuiTabsWithMore} from '@taiga-ui/kit';
|
|
import {TuiItem} from '@taiga-ui/cdk';
|
|
import {TranslatePipe} from '@ngx-translate/core';
|
|
import {Settings} from './settings/settings';
|
|
|
|
@Component({
|
|
selector: 'app-network',
|
|
imports: [
|
|
RouterOutlet,
|
|
Navbar,
|
|
Oimg,
|
|
TuiGroup,
|
|
TuiButton,
|
|
TuiIcon,
|
|
RouterLink,
|
|
TuiTabsWithMore,
|
|
TuiItem,
|
|
TuiTab,
|
|
TranslatePipe,
|
|
TuiTabsHorizontal,
|
|
Settings
|
|
],
|
|
templateUrl: './network.html',
|
|
styleUrl: './network.scss',
|
|
})
|
|
export class Network implements OnInit {
|
|
serviceManager = inject(ServiceManager)
|
|
route = inject(ActivatedRoute)
|
|
indexedDb = inject(IndexedDB)
|
|
breakpoint = inject(TUI_BREAKPOINT)
|
|
router = inject(Router)
|
|
|
|
tabActiveIndex = 2
|
|
|
|
routerOutletActive = signal(false)
|
|
|
|
networkId = ""
|
|
get store() {
|
|
return this.serviceManager.networkServices()[this.networkId]
|
|
}
|
|
|
|
ngOnInit() {
|
|
this.route.params.subscribe(async params => {
|
|
console.log("Loading network...")
|
|
const networkId = params['networkId'];
|
|
this.networkId = networkId;
|
|
|
|
const session = this.serviceManager.currentSession();
|
|
const networkData = this.serviceManager.networks().find(c => c.networkId === networkId);
|
|
|
|
if (!session || !networkData) {
|
|
console.warn(`Initialization deferred for ${networkId}: Session or NetworkData missing.`);
|
|
return;
|
|
}
|
|
|
|
if (!this.serviceManager.networkServices()[networkId]) {
|
|
const newStore = {
|
|
networkData: signal<NetworkData>(networkData),
|
|
textChannels: signal({}),
|
|
wsListener: (action, data) => {
|
|
},
|
|
} as NetworkStorage;
|
|
|
|
newStore.service = new NetworkService(
|
|
session.userData.userid,
|
|
session.token,
|
|
networkId,
|
|
this.indexedDb.getApi(),
|
|
(action, data) => newStore.wsListener(action, data)
|
|
);
|
|
|
|
this.serviceManager.networkServices()[networkId] = newStore;
|
|
}
|
|
});
|
|
}
|
|
}
|