diff --git a/src/routes/(admin)/admin/characters/+page.server.ts b/src/routes/(admin)/admin/characters/+page.server.ts index 734b4ff..d3cf1da 100644 --- a/src/routes/(admin)/admin/characters/+page.server.ts +++ b/src/routes/(admin)/admin/characters/+page.server.ts @@ -85,24 +85,33 @@ export const actions: Actions = { } try { - const updates: Record = { - // Initialize boolean fields to false (they'll be set to true if present in formData) - hakiObservation: false, - hakiArmament: false, - hakiConqueror: false - }; + const [originalCharacter] = await db + .select({ + hakiObservation: character.hakiObservation, + hakiArmament: character.hakiArmament, + hakiConqueror: character.hakiConqueror + }) + .from(character) + .where(eq(character.id, id)) + .limit(1); + + if (!originalCharacter) { + return fail(404, { error: 'Character not found' }); + } + + const updates: Record = {}; formData.forEach((value, key) => { if (key !== 'id') { - // Handle checkboxes (haki fields) - if (key === 'hakiObservation' || key === 'hakiArmament' || key === 'hakiConqueror') { - updates[key] = value === 'on'; - } // Handle integers (age, bounty, height, devilFruitId, arcId) - else if (key === 'age' || key === 'bounty' || key === 'height' || key === 'devilFruitId' || key === 'arcId') { + if (key === 'age' || key === 'bounty' || key === 'height' || key === 'devilFruitId' || key === 'arcId') { const strValue = value as string; updates[key] = strValue && strValue !== '' ? parseInt(strValue) : null; } + // Handle checkboxes (haki fields) after parsing all form data + else if (key === 'hakiObservation' || key === 'hakiArmament' || key === 'hakiConqueror') { + return; + } // Handle strings (name, gender, status, origin, affiliations, epithets, pictureUrl, url, firstAppearance) else { updates[key] = value || null; @@ -110,6 +119,17 @@ export const actions: Actions = { } }); + const submittedHakiObservation = formData.has('hakiObservation'); + const submittedHakiArmament = formData.has('hakiArmament'); + const submittedHakiConqueror = formData.has('hakiConqueror'); + + updates.hakiObservation = + submittedHakiObservation === originalCharacter.hakiObservation ? null : submittedHakiObservation; + updates.hakiArmament = + submittedHakiArmament === originalCharacter.hakiArmament ? null : submittedHakiArmament; + updates.hakiConqueror = + submittedHakiConqueror === originalCharacter.hakiConqueror ? null : submittedHakiConqueror; + // Update or insert into characterOverride table await db .insert(characterOverride) diff --git a/src/routes/(admin)/admin/characters/+page.svelte b/src/routes/(admin)/admin/characters/+page.svelte index 9026238..381bdeb 100644 --- a/src/routes/(admin)/admin/characters/+page.svelte +++ b/src/routes/(admin)/admin/characters/+page.svelte @@ -148,9 +148,9 @@ pictureUrl: override.pictureUrl ?? '', url: override.url ?? '', devilFruitId: override.devilFruitId !== null && override.devilFruitId !== undefined ? override.devilFruitId : '', - hakiObservation: override.hakiObservation ?? false, - hakiArmament: override.hakiArmament ?? false, - hakiConqueror: override.hakiConqueror ?? false, + hakiObservation: override.hakiObservation ?? char.hakiObservation, + hakiArmament: override.hakiArmament ?? char.hakiArmament, + hakiConqueror: override.hakiConqueror ?? char.hakiConqueror, firstAppearance: override.firstAppearance ?? '', arcId: override.arcId !== null && override.arcId !== undefined ? override.arcId : '', status: override.status ?? ''