Remove types, and only use single source of truth

This commit is contained in:
Pablu23
2025-10-11 16:45:27 +02:00
parent 62fe3456c3
commit 7d9787da78
6 changed files with 10 additions and 131 deletions

10
src/app.d.ts vendored
View File

@@ -17,12 +17,6 @@ export interface User {
email: string; email: string;
username: string; username: string;
} }
//
// export interface Player {
// id: number;
// name: string;
// isHost: boolean;
// }
export interface GameMode { export interface GameMode {
id: string; id: string;
@@ -36,10 +30,10 @@ export interface Playlist {
songCount: number; songCount: number;
} }
export interface GameSettings { export interface Settings {
maxPlayers: number; maxPlayers: number;
gameMode: string; gameMode: string;
selectedPlaylist: number; selectedPlaylistId: string;
} }
export type WebSocketMessage = { export type WebSocketMessage = {

View File

@@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import type { GameMode, Playlist, Settings } from '$lib/types'; import type { GameMode, Playlist, Settings } from '../../app';
import PlaylistSelector from './PlaylistSelector.svelte'; import PlaylistSelector from './PlaylistSelector.svelte';
let { let {
@@ -34,7 +34,7 @@
onUpdate(localSettings); onUpdate(localSettings);
} }
function updatePlaylist(playlistId: number) { function updatePlaylist(playlistId: string) {
localSettings.selectedPlaylistId = playlistId; localSettings.selectedPlaylistId = playlistId;
onUpdate(localSettings); onUpdate(localSettings);
} }

View File

@@ -1,10 +1,10 @@
<script lang="ts"> <script lang="ts">
import type { Playlist } from '$lib/types'; import type { Playlist } from '../../app';
const props = $props<{ const props = $props<{
playlists: Playlist[]; playlists: Playlist[];
selectedPlaylistId: number; selectedPlaylistId: string;
onSelect: (id: number) => void; onSelect: (id: string) => void;
}>(); }>();
let searchQuery = $state(''); let searchQuery = $state('');

View File

@@ -1,28 +0,0 @@
export interface Player {
id: string;
name: string;
isHost: boolean;
}
export interface GameMode {
id: string;
name: string;
}
export interface Playlist {
id: number;
name: string;
imageUrl: string;
songCount: number;
}
export interface Settings {
maxPlayers: number;
gameMode: string;
selectedPlaylistId: number;
}
export interface WebSocketMessage {
type: string;
[key: string]: any;
}

View File

@@ -1,5 +1,4 @@
import type { User } from '../app'; import type { Settings, User, WebSocketMessage } from '../app';
import type { Player, Settings, WebSocketMessage } from './types';
export class WebsocketClient { export class WebsocketClient {
connected = $state(false); connected = $state(false);
@@ -7,7 +6,7 @@ export class WebsocketClient {
gameSettings: Settings = $state({ gameSettings: Settings = $state({
maxPlayers: 8, maxPlayers: 8,
gameMode: 'classic', gameMode: 'classic',
selectedPlaylistId: 1 selectedPlaylistId: ''
}); });
socket: WebSocket | null = null; socket: WebSocket | null = null;
@@ -77,89 +76,3 @@ export class WebsocketClient {
} }
export const wsClient = new WebsocketClient(); export const wsClient = new WebsocketClient();
//
// export function createWebSocketClient() {
// let socket: WebSocket | null = null;
//
// let connected = false;
// let players: Player[] = [];
// let gameSettings: Settings = {
// maxPlayers: 8,
// gameMode: 'classic',
// selectedPlaylistId: 1
// };
//
// function connect(url: string): void {
// if (socket) socket.close();
//
// socket = new WebSocket(url);
//
// socket.onopen = () => {
// console.log('Connected to websocket');
// connected = true;
// };
//
// socket.onclose = () => {
// connected = false;
// };
//
// socket.onerror = (error) => {
// console.error('WebSocket error:', error);
// };
//
// socket.onmessage = (event: MessageEvent) => {
// try {
// const message = JSON.parse(event.data) as WebSocketMessage;
//
// console.log(`Received message ${JSON.stringify(message)}`);
//
// switch (message.type) {
// case 'playerJoin':
// players = [...players, message.player];
// break;
//
// case 'playerLeave':
// players = players.filter((p) => p.id !== message.playerId);
// break;
//
// case 'playerList':
// players = message.players;
// break;
//
// case 'settingsUpdate':
// gameSettings = message.settings;
// break;
// }
// } catch (error) {
// console.error('Failed to parse WebSocket message:', error);
// }
// };
// }
//
// function sendMessage(message: WebSocketMessage): void {
// if (socket && socket.readyState === WebSocket.OPEN) {
// socket.send(JSON.stringify(message));
// } else {
// console.warn('Cannot send message, WebSocket is not connected');
// }
// }
//
// function disconnect(): void {
// if (socket) {
// socket.close();
// socket = null;
// }
// connected = false;
// players = [];
// }
//
// return {
// connected: connected,
// players: players,
// gameSettings: gameSettings,
// connect: connect,
// sendMessage: sendMessage,
// disconnect: disconnect
// };
// }

View File

@@ -1,12 +1,12 @@
<script lang="ts"> <script lang="ts">
import { onMount, onDestroy } from 'svelte'; import { onMount, onDestroy } from 'svelte';
import { wsClient } from '$lib/websocketClient.svelte'; import { wsClient } from '$lib/websocketClient.svelte';
import type { Settings, GameMode } from '$lib/types';
import PlayerList from '$lib/components/PlayerList.svelte'; import PlayerList from '$lib/components/PlayerList.svelte';
import GameSettings from '$lib/components/GameSettings.svelte'; import GameSettings from '$lib/components/GameSettings.svelte';
import type { PageProps } from './$types'; import type { PageProps } from './$types';
import { env } from '$env/dynamic/public'; import { env } from '$env/dynamic/public';
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import type { GameMode, Settings } from '../../../app';
// Create WebSocket client // Create WebSocket client