Skip to content

Commit 531f63c

Browse files
committed
Revert "fix(demo): load all content of source"
This reverts commit 3539562.
1 parent 3539562 commit 531f63c

File tree

2 files changed

+121
-299
lines changed

2 files changed

+121
-299
lines changed

src/lib/stores/kanbanStore.svelte.ts

Lines changed: 121 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { authStore } from './authStore.svelte.js';
44
import { settingsStore } from './settingsStore.svelte.js';
55
import { initializeSyncManager } from './syncManager.svelte.js';
66
import { generateDTag } from '../utils/idGenerator.js';
7-
import { loadBoardFromNostr } from '../utils/boardLoader.js';
87
import type NDK from '@nostr-dev-kit/ndk';
98
import type { NDKKind } from '@nostr-dev-kit/ndk';
109
import {
@@ -3291,21 +3290,10 @@ export class BoardStore {
32913290
this.updateTrigger++; // Force derived recalculation
32923291
}
32933292
} else {
3294-
// ❌ Loading failed - create default demo board as fallback
3295-
console.warn('⚠️ Loading demo board from source failed, using default');
3296-
const defaultBoard = this.createDefaultDemoBoard();
3297-
BoardStorage.saveBoard(defaultBoard);
3298-
3299-
// 🎯 WICHTIG: Fallback-Board AKTIV laden
3300-
this.board = defaultBoard;
3301-
this._columnOrder = defaultBoard.columns.map(c => c.id);
3302-
3303-
this.demoBoardLoadInProgress = false; // 🚨 Clear flag!
3304-
this.triggerUpdate();
3293+
this.demoBoardLoadInProgress = false;
33053294
}
33063295
}).catch(error => {
33073296
// Bei Fehler: Erstelle Standard-Demo-Board
3308-
console.error('❌ Error loading demo board:', error);
33093297
const defaultBoard = this.createDefaultDemoBoard();
33103298
BoardStorage.saveBoard(defaultBoard);
33113299

@@ -3361,19 +3349,17 @@ export class BoardStore {
33613349

33623350
/**
33633351
* Lädt ein Board von einer Nostr-Adresse (naddr) und kopiert es als Demo-Board
3364-
*
3365-
* Uses the shared boardLoader utility to ensure consistent behavior with viewer mode.
3366-
* The only difference is that new IDs are generated for board, columns, and cards.
33673352
*/
33683353
private async loadBoardFromSourceAddress(naddrOrId: string): Promise<Board | null> {
33693354
// Import nostr utilities
33703355
const { nip19 } = await import('nostr-tools');
3356+
const { nostrEventToBoard, nostrEventToCard } = await import('$lib/utils/nostrEvents.js');
33713357

33723358
let pubkey: string;
33733359
let identifier: string;
3374-
let relays: string[] = [];
3360+
let relays: string[] | undefined;
33753361

3376-
// Decode naddr
3362+
// Decode naddr wenn es eine ist
33773363
if (naddrOrId.startsWith('naddr1')) {
33783364
try {
33793365
const decoded = nip19.decode(naddrOrId);
@@ -3384,7 +3370,7 @@ export class BoardStore {
33843370

33853371
pubkey = decoded.data.pubkey;
33863372
identifier = decoded.data.identifier;
3387-
relays = decoded.data.relays || [];
3373+
relays = decoded.data.relays;
33883374

33893375
console.log('📍 naddr dekodiert:', { pubkey: pubkey.slice(0, 8) + '...', identifier, relays });
33903376
} catch (error) {
@@ -3403,26 +3389,127 @@ export class BoardStore {
34033389
return null;
34043390
}
34053391

3406-
// Use shared board loading utility with demo board options
3407-
// This ensures exact same logic as viewing a board, but with new IDs
3408-
const board = await loadBoardFromNostr(
3409-
ndk,
3410-
pubkey,
3411-
identifier,
3412-
relays,
3413-
{
3414-
generateNewIds: true, // Generate new IDs for demo board copy
3415-
overrideBoardId: 'demo-board',
3416-
overrideAuthor: '0000000000000000000000000000000000000000000000000000000000000000',
3417-
overrideAuthorName: 'Demo User'
3392+
// Zu Relays verbinden falls angegeben
3393+
if (relays && relays.length > 0) {
3394+
for (const relayUrl of relays) {
3395+
try {
3396+
const relay = ndk.pool.getRelay(relayUrl);
3397+
if (relay && !relay.connectivity.status) {
3398+
await relay.connect();
3399+
console.log(`🔌 Relay verbunden: ${relayUrl}`);
3400+
}
3401+
} catch (error) {
3402+
console.warn(`⚠️ Konnte nicht zu Relay verbinden: ${relayUrl}`, error);
3403+
}
34183404
}
3419-
);
3405+
3406+
// Kurz warten damit Relays verbinden können
3407+
await new Promise(resolve => setTimeout(resolve, 1000));
3408+
}
34203409

3421-
if (!board) {
3422-
console.error('❌ Konnte Demo-Board nicht laden');
3410+
// Board Event laden
3411+
const filter = {
3412+
kinds: [30301],
3413+
authors: [pubkey],
3414+
'#d': [identifier]
3415+
};
3416+
3417+
console.log('🔍 Lade Board Event:', filter);
3418+
const boardEvent = await ndk.fetchEvent(filter);
3419+
3420+
if (!boardEvent) {
3421+
console.error('❌ Board Event nicht gefunden');
34233422
return null;
34243423
}
34253424

3425+
console.log('✅ Board Event gefunden:', boardEvent.id);
3426+
3427+
// Board aus Event konvertieren
3428+
const boardProps = nostrEventToBoard(boardEvent);
3429+
3430+
console.log(`📋 Board hat ${boardProps.columns?.length || 0} Spalten:`,
3431+
boardProps.columns?.map(c => `${c.name} (${c.id})`) || []);
3432+
3433+
// Board mit neuer Demo-ID erstellen
3434+
// Use a valid dummy pubkey (64 zeros) instead of 'demo' to avoid Nostr validation errors
3435+
const board = new Board({
3436+
...boardProps,
3437+
id: 'demo-board', // ⚠️ WICHTIG: Neue ID für Demo-Board
3438+
author: '0000000000000000000000000000000000000000000000000000000000000000', // Valid hex pubkey
3439+
authorName: 'Demo User',
3440+
publishState: 'private'
3441+
});
3442+
3443+
// Cards für das Board laden
3444+
const aTagValue = `30301:${pubkey}:${identifier}`;
3445+
const cardFilter = {
3446+
kinds: [30302],
3447+
'#a': [aTagValue]
3448+
};
3449+
3450+
console.log('🔍 Lade Card Events für:', aTagValue);
3451+
const cardEvents = await ndk.fetchEvents(cardFilter);
3452+
const cardEventArray = Array.from(cardEvents);
3453+
3454+
console.log(`✅ ${cardEventArray.length} Card Events gefunden`);
3455+
3456+
if (cardEventArray.length === 0) return board;
3457+
3458+
// ⚠️ CRITICAL: Reuse exact logic from working [naddr]/+page.svelte
3459+
// DON'T use addCard() - it does array reassignment which doesn't work before board is in store!
3460+
// Instead: Create Card instance and push directly to column.cards array
3461+
for (const cardEvent of cardEventArray) {
3462+
try {
3463+
const cardProps = nostrEventToCard(cardEvent as any) as CardProps & { columnName?: string };
3464+
if (!cardProps.id) continue;
3465+
3466+
// Finde oder erstelle Spalte (columnName kommt via @ts-ignore aus nostrEventToCard)
3467+
const columnName = cardProps.columnName || 'To Do';
3468+
let column = board.columns.find(c => c.name === columnName);
3469+
3470+
if (!column) {
3471+
// Spalte existiert nicht im Board Event, erstelle sie
3472+
column = board.addColumn({ name: columnName });
3473+
console.log(`📁 Spalte erstellt: ${columnName}`);
3474+
}
3475+
3476+
// Prüfe ob Card bereits existiert
3477+
const existingCard = column.findCard(cardProps.id);
3478+
if (existingCard) {
3479+
// Update existierende Card (LWW)
3480+
const existingTime = existingCard.updatedAt ? new Date(existingCard.updatedAt).getTime() : 0;
3481+
const newTime = cardProps.updatedAt ? new Date(cardProps.updatedAt).getTime() : 0;
3482+
3483+
if (newTime > existingTime) {
3484+
existingCard.update(cardProps);
3485+
}
3486+
} else {
3487+
// ⚠️ CRITICAL: Use same pattern as [naddr]/+page.svelte
3488+
// Create Card and push to array directly (NOT addCard which does reassignment)
3489+
const card = new Card({
3490+
...cardProps,
3491+
author: '0000000000000000000000000000000000000000000000000000000000000000',
3492+
authorName: 'Demo User'
3493+
});
3494+
column.cards.push(card);
3495+
}
3496+
} catch (error) {
3497+
console.warn('⚠️ Fehler beim Verarbeiten von Card Event:', error);
3498+
}
3499+
}
3500+
3501+
// ⚡ CRITICAL: Sortiere Cards nach Rank pro Spalte!
3502+
// ndk.fetchEvents() liefert ein Set ohne garantierte Reihenfolge.
3503+
// Ohne Sortierung hängt die Card-Reihenfolge davon ab, welcher Relay
3504+
// zuerst antwortet → unterschiedliche Reihenfolge auf verschiedenen Browsern.
3505+
for (const column of board.columns) {
3506+
column.cards.sort((a: any, b: any) => {
3507+
const rankA = a.rank ?? Number.MAX_SAFE_INTEGER;
3508+
const rankB = b.rank ?? Number.MAX_SAFE_INTEGER;
3509+
return rankA - rankB;
3510+
});
3511+
}
3512+
34263513
console.log(`✅ Demo-Board erstellt mit ${board.columns.length} Spalten und ${board.columns.reduce((sum, col) => sum + col.cards.length, 0)} Karten`);
34273514

34283515
return board;

0 commit comments

Comments
 (0)