From d079070ae83fd93513fa832c0a104210003c6267 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Sun, 4 Jan 2026 14:28:30 -0800 Subject: [PATCH] import page improvements (#450) ## Summary - add suggestion support to metadata sections for name fields - remove duplicate basic info sections from import pages - auto-generate wikiJa and kamigame URLs from name (jp) field ## Test plan - [ ] test batch import flow still works - [ ] verify wikiJa/kamigame auto-populate when typing japanese name - [ ] check metadata sections show suggestion badges --- .../sections/CharacterMetadataSection.svelte | 18 +++++- .../sections/SummonMetadataSection.svelte | 20 ++++++- .../sections/WeaponMetadataSection.svelte | 12 +++- src/lib/utils/rarity.ts | 8 +++ .../database/characters/import/+page.svelte | 55 ++++++------------- .../database/summons/import/+page.svelte | 51 ++++++----------- .../database/weapons/import/+page.svelte | 43 ++++++--------- 7 files changed, 105 insertions(+), 102 deletions(-) diff --git a/src/lib/features/database/characters/sections/CharacterMetadataSection.svelte b/src/lib/features/database/characters/sections/CharacterMetadataSection.svelte index dae9ca36..5a4c889b 100644 --- a/src/lib/features/database/characters/sections/CharacterMetadataSection.svelte +++ b/src/lib/features/database/characters/sections/CharacterMetadataSection.svelte @@ -78,19 +78,27 @@ {#if editMode} - onAcceptSuggestion?.('name', suggestions?.nameEn)} + onDismissSuggestion={() => onDismissSuggestion?.('name')} /> - onAcceptSuggestion?.('nameJp', suggestions?.nameJp)} + onDismissSuggestion={() => onDismissSuggestion?.('nameJp')} /> onAcceptSuggestion?.('rarity', suggestions?.rarity)} onDismissSuggestion={() => onDismissSuggestion?.('rarity')} /> - onAcceptSuggestion?.('granblueId', suggestions?.granblueId)} + onDismissSuggestion={() => onDismissSuggestion?.('granblueId')} /> {#if editMode} - onAcceptSuggestion?.('name', suggestions?.nameEn)} + onDismissSuggestion={() => onDismissSuggestion?.('name')} /> - onAcceptSuggestion?.('nameJp', suggestions?.nameJp)} + onDismissSuggestion={() => onDismissSuggestion?.('nameJp')} /> + {:else} diff --git a/src/lib/features/database/weapons/sections/WeaponMetadataSection.svelte b/src/lib/features/database/weapons/sections/WeaponMetadataSection.svelte index c93e1e28..bd389fe8 100644 --- a/src/lib/features/database/weapons/sections/WeaponMetadataSection.svelte +++ b/src/lib/features/database/weapons/sections/WeaponMetadataSection.svelte @@ -34,19 +34,27 @@ {#if editMode} - onAcceptSuggestion?.('name', suggestions?.nameEn)} + onDismissSuggestion={() => onDismissSuggestion?.('name')} /> - onAcceptSuggestion?.('nameJp', suggestions?.nameJp)} + onDismissSuggestion={() => onDismissSuggestion?.('nameJp')} /> ({ value: Number(value), diff --git a/src/routes/(app)/database/characters/import/+page.svelte b/src/routes/(app)/database/characters/import/+page.svelte index 09519c80..37eab1ca 100644 --- a/src/routes/(app)/database/characters/import/+page.svelte +++ b/src/routes/(app)/database/characters/import/+page.svelte @@ -13,6 +13,7 @@ buildGamewithUrl, buildKamigameUrl } from '$lib/utils/external-links' + import { getRarityPrefix } from '$lib/utils/rarity' // Components import CharacterUncapSection from '$lib/features/database/characters/sections/CharacterUncapSection.svelte' @@ -85,6 +86,23 @@ // Get selected entity data const selectedEntity = $derived(selectedWikiPage ? entities.get(selectedWikiPage) : null) + // Auto-generate wiki URLs when Name (JP) or Rarity changes + $effect(() => { + if (!selectedWikiPage) return + const formData = formDataByPage[selectedWikiPage] + if (!formData) return + + const nameJp = formData.nameJp + const rarity = formData.rarity + + if (nameJp) { + // Auto-generate wikiJa: "Name (JP) (SSR)" + formData.wikiJa = `${nameJp} (${getRarityPrefix(rarity)})` + // Auto-generate kamigame: "Name (JP)" for characters (no rarity prefix) + formData.kamigame = nameJp + } + }) + // Entity tabs for TabbedEntitySelector const entityTabs = $derived( Array.from(entities.entries()).map(([wikiPage, entity]) => ({ @@ -451,43 +469,6 @@ {@const suggestions = selectedEntity.suggestions} {@const dismissed = dismissedByPage[selectedWikiPage] ?? new Set()}
- - - handleAcceptSuggestion('name', suggestions?.nameEn)} - onDismissSuggestion={() => handleDismissSuggestion('name')} - /> - handleAcceptSuggestion('nameJp', suggestions?.nameJp)} - onDismissSuggestion={() => handleDismissSuggestion('nameJp')} - /> - handleAcceptSuggestion('granblueId', suggestions?.granblueId)} - onDismissSuggestion={() => handleDismissSuggestion('granblueId')} - /> - - { + if (!selectedWikiPage) return + const formData = formDataByPage[selectedWikiPage] + if (!formData) return + + const nameJp = formData.nameJp + const rarity = formData.rarity + + if (nameJp) { + // Auto-generate wikiJa: "Name (JP) (SSR)" + formData.wikiJa = `${nameJp} (${getRarityPrefix(rarity)})` + // Auto-generate kamigame: "SSRName (JP)" for summons + formData.kamigame = `${getRarityPrefix(rarity)}${nameJp}` + } + }) + // Entity tabs for TabbedEntitySelector const entityTabs = $derived( Array.from(entities.entries()).map(([wikiPage, entity]) => ({ @@ -430,39 +448,6 @@ {@const suggestions = selectedEntity.suggestions} {@const dismissed = dismissedByPage[selectedWikiPage] ?? new Set()}
- - handleAcceptSuggestion('name', suggestions?.nameEn)} - onDismissSuggestion={() => handleDismissSuggestion('name')} - /> - handleAcceptSuggestion('nameJp', suggestions?.nameJp)} - onDismissSuggestion={() => handleDismissSuggestion('nameJp')} - /> - - - { + if (!selectedWikiPage) return + const formData = formDataByPage[selectedWikiPage] + if (!formData) return + + const nameJp = formData.nameJp + const rarity = formData.rarity + + if (nameJp) { + // Auto-generate wikiJa: "Name (JP) (SSR)" + formData.wikiJa = `${nameJp} (${getRarityPrefix(rarity)})` + // Auto-generate kamigame: "SSRName (JP)" for weapons + formData.kamigame = `${getRarityPrefix(rarity)}${nameJp}` + } + }) + // Entity tabs for TabbedEntitySelector const entityTabs = $derived( Array.from(entities.entries()).map(([wikiPage, entity]) => ({ @@ -444,31 +462,6 @@ {@const suggestions = selectedEntity.suggestions} {@const dismissed = dismissedByPage[selectedWikiPage] ?? new Set()}
- - handleAcceptSuggestion('name', suggestions?.nameEn)} - onDismissSuggestion={() => handleDismissSuggestion('name')} - /> - handleAcceptSuggestion('nameJp', suggestions?.nameJp)} - onDismissSuggestion={() => handleDismissSuggestion('nameJp')} - /> - -