fix: Fix match page SSR, tab errors, and table consistency

- Enable SSR for match pages by detecting server vs client context in API client
- Fix 500 errors on economy, chat, and details tabs by adding data loaders
- Handle unparsed matches gracefully with "Match Not Parsed" messages
- Fix dynamic team ID detection instead of hardcoding team IDs 2/3
- Fix DataTable component to properly render HTML in render functions
- Add fixed column widths to tables for visual consistency
- Add meta titles to all tab page loaders
- Fix Svelte 5 $derived syntax errors
- Fix ESLint errors (unused imports, any types, reactive state)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-05 00:27:47 +01:00
parent 7d8e3a6de0
commit 62bfdc8090
11 changed files with 797 additions and 591 deletions

View File

@@ -10,6 +10,7 @@
render?: (value: T[keyof T], row: T) => unknown;
align?: 'left' | 'center' | 'right';
class?: string;
width?: string; // e.g., '200px', '30%', 'auto'
}
interface Props {
@@ -19,6 +20,7 @@
striped?: boolean;
hoverable?: boolean;
compact?: boolean;
fixedLayout?: boolean; // Use table-layout: fixed for consistent column widths
}
let {
@@ -27,7 +29,8 @@
class: className = '',
striped = false,
hoverable = true,
compact = false
compact = false,
fixedLayout = false
}: Props = $props();
let sortKey = $state<keyof T | null>(null);
@@ -68,7 +71,12 @@
</script>
<div class="overflow-x-auto {className}">
<table class="table" class:table-zebra={striped} class:table-xs={compact}>
<table
class="table"
class:table-zebra={striped}
class:table-xs={compact}
style={fixedLayout ? 'table-layout: fixed;' : ''}
>
<thead>
<tr>
{#each columns as column}
@@ -76,6 +84,7 @@
class:cursor-pointer={column.sortable}
class:hover:bg-base-200={column.sortable}
class="text-{column.align || 'left'} {column.class || ''}"
style={column.width ? `width: ${column.width}` : ''}
onclick={() => handleSort(column)}
>
<div
@@ -109,7 +118,7 @@
{#each columns as column}
<td class="text-{column.align || 'left'} {column.class || ''}">
{#if column.render}
{@render column.render(row[column.key], row)}
{@html column.render(row[column.key], row)}
{:else}
{getValue(row, column)}
{/if}