pre-fill summon ID from wiki data in batch import

This commit is contained in:
Justin Edmund 2025-12-14 17:01:16 -08:00
parent 6e6121cb71
commit 37f2178d4a
2 changed files with 25 additions and 18 deletions

View file

@ -590,6 +590,7 @@ export interface SummonSuggestions {
nameEn?: string nameEn?: string
nameJp?: string nameJp?: string
granblueId?: string granblueId?: string
summonId?: string
rarity?: number rarity?: number
element?: number element?: number
minHp?: number minHp?: number

View file

@ -4,7 +4,7 @@
import { goto } from '$app/navigation' import { goto } from '$app/navigation'
import { entityAdapter, type SummonSuggestions } from '$lib/api/adapters/entity.adapter' import { entityAdapter, type SummonSuggestions } from '$lib/api/adapters/entity.adapter'
import { fetchWikiPages, buildWikiDataMap } from '$lib/api/wiki' import { fetchWikiPages, buildWikiDataMap } from '$lib/api/wiki'
import { getSummonImage, getPlaceholderImage } from '$lib/utils/images' import { getGameCdnSummonImage, getPlaceholderImage } from '$lib/utils/images'
// Components // Components
import SummonUncapSection from '$lib/features/database/summons/sections/SummonUncapSection.svelte' import SummonUncapSection from '$lib/features/database/summons/sections/SummonUncapSection.svelte'
@ -80,7 +80,7 @@
granblueId: entity.granblueId, granblueId: entity.granblueId,
status: entity.status, status: entity.status,
imageUrl: entity.granblueId imageUrl: entity.granblueId
? getSummonImage(entity.granblueId, 'square') ? getGameCdnSummonImage(entity.granblueId)
: getPlaceholderImage('summon', 'square'), : getPlaceholderImage('summon', 'square'),
error: entity.error, error: entity.error,
saved: savedEntities.has(wikiPage) saved: savedEntities.has(wikiPage)
@ -93,7 +93,7 @@
name: suggestions?.nameEn ?? '', name: suggestions?.nameEn ?? '',
nameJp: suggestions?.nameJp ?? '', nameJp: suggestions?.nameJp ?? '',
granblue_id: suggestions?.granblueId ?? '', granblue_id: suggestions?.granblueId ?? '',
summonId: '', summonId: suggestions?.summonId ?? '',
rarity: suggestions?.rarity ?? 3, rarity: suggestions?.rarity ?? 3,
element: suggestions?.element ?? 0, element: suggestions?.element ?? 0,
series: '', series: '',
@ -283,7 +283,9 @@
savedEntities = new Set(savedEntities) savedEntities = new Set(savedEntities)
// Select next unsaved entity // Select next unsaved entity
const unsaved = entityTabs.find((e) => !savedEntities.has(e.wikiPage) && e.status === 'success') const unsaved = entityTabs.find(
(e) => !savedEntities.has(e.wikiPage) && e.status === 'success'
)
if (unsaved) { if (unsaved) {
selectedWikiPage = unsaved.wikiPage selectedWikiPage = unsaved.wikiPage
} }
@ -345,17 +347,12 @@
<!-- Input phase --> <!-- Input phase -->
{#if entities.size === 0} {#if entities.size === 0}
<div class="input-phase"> <form class="input-phase" onsubmit={(e) => { e.preventDefault(); fetchWikiData(); }}>
<p class="hint">Enter up to 10 wiki page names to import data</p> <p class="hint">Enter up to 10 wiki page names to import data</p>
<div class="wiki-inputs"> <div class="wiki-inputs">
{#each wikiPagesInputs as _, index} {#each wikiPagesInputs as _, index}
<div class="input-row"> <div class="input-row">
<Input <Input bind:value={wikiPagesInputs[index]} placeholder="Bahamut" contained fullWidth />
bind:value={wikiPagesInputs[index]}
placeholder="Bahamut"
contained
fullWidth
/>
{#if wikiPagesInputs.length > 1} {#if wikiPagesInputs.length > 1}
<button <button
type="button" type="button"
@ -368,20 +365,24 @@
{/if} {/if}
</div> </div>
{/each} {/each}
<Button variant="ghost" onclick={addInput}> <Button
<Icon name="plus" size={16} /> variant="ghost"
Add another type="button"
</Button> onclick={addInput}
class="add-input-button"
leftIcon="plus"
size="small">Add another</Button
>
</div> </div>
{#if fetchError} {#if fetchError}
<p class="error">{fetchError}</p> <p class="error">{fetchError}</p>
{/if} {/if}
<div class="fetch-button"> <div class="fetch-button">
<Button variant="primary" onclick={fetchWikiData} disabled={isFetching}> <Button variant="primary" type="submit" disabled={isFetching}>
{isFetching ? 'Fetching...' : 'Fetch data'} {isFetching ? 'Fetching...' : 'Fetch data'}
</Button> </Button>
</div> </div>
</div> </form>
{:else} {:else}
<!-- Entity selector --> <!-- Entity selector -->
<div class="entity-selector-container"> <div class="entity-selector-container">
@ -500,7 +501,8 @@
placeholder="YYYY-MM-DD" placeholder="YYYY-MM-DD"
suggestion={suggestions?.releaseDate} suggestion={suggestions?.releaseDate}
dismissedSuggestion={dismissed.has('releaseDate')} dismissedSuggestion={dismissed.has('releaseDate')}
onAcceptSuggestion={() => handleAcceptSuggestion('releaseDate', suggestions?.releaseDate)} onAcceptSuggestion={() =>
handleAcceptSuggestion('releaseDate', suggestions?.releaseDate)}
onDismissSuggestion={() => handleDismissSuggestion('releaseDate')} onDismissSuggestion={() => handleDismissSuggestion('releaseDate')}
/> />
{#if formData.flb} {#if formData.flb}
@ -619,6 +621,10 @@
align-items: center; align-items: center;
} }
:global(.wiki-inputs .add-input-button) {
width: fit-content;
}
.remove-button { .remove-button {
display: flex; display: flex;
align-items: center; align-items: center;