import pages: add wiki_raw to payload, misc fixes
This commit is contained in:
parent
5edcf6473a
commit
6683a9e53a
5 changed files with 220 additions and 168 deletions
|
|
@ -242,6 +242,7 @@ export interface CreateCharacterPayload {
|
||||||
kamigame?: string
|
kamigame?: string
|
||||||
nicknames_en?: string[]
|
nicknames_en?: string[]
|
||||||
nicknames_jp?: string[]
|
nicknames_jp?: string[]
|
||||||
|
wiki_raw?: string | null
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,11 @@
|
||||||
const placeholderImage = $derived(() => {
|
const placeholderImage = $derived(() => {
|
||||||
switch (entityType) {
|
switch (entityType) {
|
||||||
case 'character':
|
case 'character':
|
||||||
return '/images/placeholders/placeholder-character-grid.png'
|
return '/images/placeholders/placeholder-character-square.png'
|
||||||
case 'weapon':
|
case 'weapon':
|
||||||
return '/images/placeholders/placeholder-weapon-grid.png'
|
return '/images/placeholders/placeholder-weapon-square.png'
|
||||||
case 'summon':
|
case 'summon':
|
||||||
return '/images/placeholders/placeholder-summon-sub.png'
|
return '/images/placeholders/placeholder-summon-square.png'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@
|
||||||
status: 'loading' | 'success' | 'error'
|
status: 'loading' | 'success' | 'error'
|
||||||
granblueId?: string
|
granblueId?: string
|
||||||
suggestions?: CharacterSuggestions
|
suggestions?: CharacterSuggestions
|
||||||
|
wikiRaw?: string
|
||||||
error?: string
|
error?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -82,8 +83,8 @@
|
||||||
granblueId: entity.granblueId,
|
granblueId: entity.granblueId,
|
||||||
status: entity.status,
|
status: entity.status,
|
||||||
imageUrl: entity.granblueId
|
imageUrl: entity.granblueId
|
||||||
? getCharacterImage(entity.granblueId, 'grid')
|
? getCharacterImage(entity.granblueId, 'square')
|
||||||
: '/images/placeholders/placeholder-character-grid.png',
|
: '/images/placeholders/placeholder-character-square.png',
|
||||||
error: entity.error,
|
error: entity.error,
|
||||||
saved: savedEntities.has(wikiPage)
|
saved: savedEntities.has(wikiPage)
|
||||||
}))
|
}))
|
||||||
|
|
@ -95,7 +96,7 @@
|
||||||
name: suggestions?.nameEn ?? '',
|
name: suggestions?.nameEn ?? '',
|
||||||
nameJp: suggestions?.nameJp ?? '',
|
nameJp: suggestions?.nameJp ?? '',
|
||||||
granblueId: suggestions?.granblueId ?? '',
|
granblueId: suggestions?.granblueId ?? '',
|
||||||
characterId: '',
|
characterId: suggestions?.characterId?.join(', ') ?? '',
|
||||||
rarity: suggestions?.rarity ?? 3,
|
rarity: suggestions?.rarity ?? 3,
|
||||||
element: suggestions?.element ?? 0,
|
element: suggestions?.element ?? 0,
|
||||||
race1: suggestions?.race1 ?? null,
|
race1: suggestions?.race1 ?? null,
|
||||||
|
|
@ -169,6 +170,7 @@
|
||||||
status: result.status,
|
status: result.status,
|
||||||
granblueId: result.granblueId,
|
granblueId: result.granblueId,
|
||||||
suggestions: result.suggestions,
|
suggestions: result.suggestions,
|
||||||
|
wikiRaw: result.wikiRaw,
|
||||||
error: result.error
|
error: result.error
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -222,6 +224,7 @@
|
||||||
if (!selectedWikiPage) return
|
if (!selectedWikiPage) return
|
||||||
const formData = formDataMap.get(selectedWikiPage)
|
const formData = formDataMap.get(selectedWikiPage)
|
||||||
if (!formData) return
|
if (!formData) return
|
||||||
|
const entity = entities.get(selectedWikiPage)
|
||||||
|
|
||||||
isSaving = true
|
isSaving = true
|
||||||
saveError = null
|
saveError = null
|
||||||
|
|
@ -268,7 +271,8 @@
|
||||||
gamewith: formData.gamewith,
|
gamewith: formData.gamewith,
|
||||||
kamigame: formData.kamigame,
|
kamigame: formData.kamigame,
|
||||||
nicknames_en: formData.nicknamesEn,
|
nicknames_en: formData.nicknamesEn,
|
||||||
nicknames_jp: formData.nicknamesJp
|
nicknames_jp: formData.nicknamesJp,
|
||||||
|
wiki_raw: entity?.wikiRaw || null
|
||||||
}
|
}
|
||||||
|
|
||||||
await entityAdapter.createCharacter(payload)
|
await entityAdapter.createCharacter(payload)
|
||||||
|
|
@ -421,7 +425,7 @@
|
||||||
<CharacterMetadataSection
|
<CharacterMetadataSection
|
||||||
character={emptyCharacter}
|
character={emptyCharacter}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={formData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -431,7 +435,7 @@
|
||||||
<CharacterUncapSection
|
<CharacterUncapSection
|
||||||
character={emptyCharacter}
|
character={emptyCharacter}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={formData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -441,7 +445,7 @@
|
||||||
<CharacterTaxonomySection
|
<CharacterTaxonomySection
|
||||||
character={emptyCharacter}
|
character={emptyCharacter}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={formData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -451,7 +455,7 @@
|
||||||
<CharacterStatsSection
|
<CharacterStatsSection
|
||||||
character={emptyCharacter}
|
character={emptyCharacter}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={formData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -549,6 +553,14 @@
|
||||||
onDismissSuggestion={() => handleDismissSuggestion('kamigame')}
|
onDismissSuggestion={() => handleDismissSuggestion('kamigame')}
|
||||||
/>
|
/>
|
||||||
</DetailsContainer>
|
</DetailsContainer>
|
||||||
|
|
||||||
|
{#if selectedEntity?.wikiRaw}
|
||||||
|
<DetailsContainer title="Raw Wiki Data">
|
||||||
|
<div class="wiki-raw">
|
||||||
|
<pre>{selectedEntity.wikiRaw}</pre>
|
||||||
|
</div>
|
||||||
|
</DetailsContainer>
|
||||||
|
{/if}
|
||||||
</section>
|
</section>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
@ -627,4 +639,20 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.wiki-raw {
|
||||||
|
padding: spacing.$unit;
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin: 0;
|
||||||
|
padding: spacing.$unit;
|
||||||
|
background: colors.$grey-95;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: typography.$font-small;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
word-break: break-word;
|
||||||
|
max-height: 300px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,7 @@
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { goto } from '$app/navigation'
|
import { goto } from '$app/navigation'
|
||||||
import {
|
import { entityAdapter, type SummonSuggestions } from '$lib/api/adapters/entity.adapter'
|
||||||
entityAdapter,
|
|
||||||
type SummonSuggestions,
|
|
||||||
type BatchPreviewResult
|
|
||||||
} from '$lib/api/adapters/entity.adapter'
|
|
||||||
import { getSummonImage } from '$lib/utils/images'
|
import { getSummonImage } from '$lib/utils/images'
|
||||||
|
|
||||||
// Components
|
// Components
|
||||||
|
|
@ -26,6 +22,15 @@
|
||||||
|
|
||||||
import type { PageData } from './$types'
|
import type { PageData } from './$types'
|
||||||
|
|
||||||
|
// Internal entity state including loading status
|
||||||
|
interface EntityState {
|
||||||
|
wikiPage: string
|
||||||
|
status: 'loading' | 'success' | 'error'
|
||||||
|
granblueId?: string
|
||||||
|
suggestions?: SummonSuggestions
|
||||||
|
error?: string
|
||||||
|
}
|
||||||
|
|
||||||
let { data }: { data: PageData } = $props()
|
let { data }: { data: PageData } = $props()
|
||||||
|
|
||||||
// Input phase
|
// Input phase
|
||||||
|
|
@ -34,7 +39,7 @@
|
||||||
let fetchError = $state<string | null>(null)
|
let fetchError = $state<string | null>(null)
|
||||||
|
|
||||||
// Fetched entities
|
// Fetched entities
|
||||||
let entities = $state<Map<string, BatchPreviewResult<SummonSuggestions>>>(new Map())
|
let entities = $state<Map<string, EntityState>>(new Map())
|
||||||
let selectedWikiPage = $state<string | null>(null)
|
let selectedWikiPage = $state<string | null>(null)
|
||||||
|
|
||||||
// Form data per entity (keyed by wikiPage)
|
// Form data per entity (keyed by wikiPage)
|
||||||
|
|
@ -65,10 +70,6 @@
|
||||||
|
|
||||||
// Get selected entity data
|
// Get selected entity data
|
||||||
const selectedEntity = $derived(selectedWikiPage ? entities.get(selectedWikiPage) : null)
|
const selectedEntity = $derived(selectedWikiPage ? entities.get(selectedWikiPage) : null)
|
||||||
const selectedFormData = $derived(selectedWikiPage ? formDataMap.get(selectedWikiPage) : null)
|
|
||||||
const selectedDismissed = $derived(
|
|
||||||
selectedWikiPage ? dismissedSuggestionsMap.get(selectedWikiPage) ?? new Set() : new Set()
|
|
||||||
)
|
|
||||||
|
|
||||||
// Entity tabs for TabbedEntitySelector
|
// Entity tabs for TabbedEntitySelector
|
||||||
const entityTabs = $derived<EntityTab[]>(
|
const entityTabs = $derived<EntityTab[]>(
|
||||||
|
|
@ -77,8 +78,8 @@
|
||||||
granblueId: entity.granblueId,
|
granblueId: entity.granblueId,
|
||||||
status: entity.status,
|
status: entity.status,
|
||||||
imageUrl: entity.granblueId
|
imageUrl: entity.granblueId
|
||||||
? getSummonImage(entity.granblueId)
|
? getSummonImage(entity.granblueId, 'square')
|
||||||
: '/images/placeholders/placeholder-summon-sub.png',
|
: '/images/placeholders/placeholder-summon-square.png',
|
||||||
error: entity.error,
|
error: entity.error,
|
||||||
saved: savedEntities.has(wikiPage)
|
saved: savedEntities.has(wikiPage)
|
||||||
}))
|
}))
|
||||||
|
|
@ -140,11 +141,11 @@
|
||||||
fetchError = null
|
fetchError = null
|
||||||
|
|
||||||
// Initialize entities as loading
|
// Initialize entities as loading
|
||||||
const newEntities = new Map<string, BatchPreviewResult<SummonSuggestions>>()
|
const newEntities = new Map<string, EntityState>()
|
||||||
pages.forEach((page) => {
|
pages.forEach((page) => {
|
||||||
newEntities.set(page, {
|
newEntities.set(page, {
|
||||||
wikiPage: page,
|
wikiPage: page,
|
||||||
status: 'loading' as const
|
status: 'loading'
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
entities = newEntities
|
entities = newEntities
|
||||||
|
|
@ -154,15 +155,21 @@
|
||||||
const response = await entityAdapter.batchPreviewSummons(pages)
|
const response = await entityAdapter.batchPreviewSummons(pages)
|
||||||
|
|
||||||
// Update entities with results
|
// Update entities with results
|
||||||
const updatedEntities = new Map<string, BatchPreviewResult<SummonSuggestions>>()
|
const updatedEntities = new Map<string, EntityState>()
|
||||||
response.results.forEach((result) => {
|
response.results.forEach((result) => {
|
||||||
updatedEntities.set(result.wikiPage, result)
|
updatedEntities.set(result.wikiPage, {
|
||||||
|
wikiPage: result.wikiPage,
|
||||||
|
status: result.status,
|
||||||
|
granblueId: result.granblueId,
|
||||||
|
suggestions: result.suggestions,
|
||||||
|
error: result.error
|
||||||
|
})
|
||||||
|
|
||||||
// Create form data for successful results
|
// Create form data for successful results
|
||||||
if (result.status === 'success') {
|
if (result.status === 'success') {
|
||||||
const formData = createEmptyFormData(result.wikiPage, result.suggestions)
|
const formData = createEmptyFormData(result.wikiPage, result.suggestions)
|
||||||
formDataMap.set(result.wikiPage, formData)
|
formDataMap.set(result.wikiPage, formData)
|
||||||
dismissedSuggestionsMap.set(result.wikiPage, new Set())
|
dismissedSuggestionsMap.set(result.wikiPage, new Set<string>())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
entities = updatedEntities
|
entities = updatedEntities
|
||||||
|
|
@ -185,7 +192,7 @@
|
||||||
|
|
||||||
// Accept a suggestion
|
// Accept a suggestion
|
||||||
function handleAcceptSuggestion(field: string, value: any) {
|
function handleAcceptSuggestion(field: string, value: any) {
|
||||||
if (!selectedWikiPage || !selectedFormData) return
|
if (!selectedWikiPage) return
|
||||||
|
|
||||||
const formData = formDataMap.get(selectedWikiPage)
|
const formData = formDataMap.get(selectedWikiPage)
|
||||||
if (formData) {
|
if (formData) {
|
||||||
|
|
@ -205,46 +212,48 @@
|
||||||
|
|
||||||
// Save current entity
|
// Save current entity
|
||||||
async function saveCurrentEntity() {
|
async function saveCurrentEntity() {
|
||||||
if (!selectedWikiPage || !selectedFormData) return
|
if (!selectedWikiPage) return
|
||||||
|
const formData = formDataMap.get(selectedWikiPage)
|
||||||
|
if (!formData) return
|
||||||
|
|
||||||
isSaving = true
|
isSaving = true
|
||||||
saveError = null
|
saveError = null
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const payload = {
|
const payload = {
|
||||||
granblue_id: selectedFormData.granblue_id,
|
granblue_id: formData.granblue_id,
|
||||||
name_en: selectedFormData.name,
|
name_en: formData.name,
|
||||||
name_jp: selectedFormData.nameJp,
|
name_jp: formData.nameJp,
|
||||||
summon_id: selectedFormData.summonId || undefined,
|
summon_id: formData.summonId || undefined,
|
||||||
rarity: selectedFormData.rarity,
|
rarity: formData.rarity,
|
||||||
element: selectedFormData.element,
|
element: formData.element,
|
||||||
series: selectedFormData.series || undefined,
|
series: formData.series || undefined,
|
||||||
min_hp: selectedFormData.minHp,
|
min_hp: formData.minHp,
|
||||||
max_hp: selectedFormData.maxHp,
|
max_hp: formData.maxHp,
|
||||||
max_hp_flb: selectedFormData.maxHpFlb,
|
max_hp_flb: formData.maxHpFlb,
|
||||||
max_hp_ulb: selectedFormData.maxHpUlb,
|
max_hp_ulb: formData.maxHpUlb,
|
||||||
max_hp_xlb: selectedFormData.maxHpTranscendence,
|
max_hp_xlb: formData.maxHpTranscendence,
|
||||||
min_atk: selectedFormData.minAtk,
|
min_atk: formData.minAtk,
|
||||||
max_atk: selectedFormData.maxAtk,
|
max_atk: formData.maxAtk,
|
||||||
max_atk_flb: selectedFormData.maxAtkFlb,
|
max_atk_flb: formData.maxAtkFlb,
|
||||||
max_atk_ulb: selectedFormData.maxAtkUlb,
|
max_atk_ulb: formData.maxAtkUlb,
|
||||||
max_atk_xlb: selectedFormData.maxAtkTranscendence,
|
max_atk_xlb: formData.maxAtkTranscendence,
|
||||||
max_level: selectedFormData.maxLevel,
|
max_level: formData.maxLevel,
|
||||||
flb: selectedFormData.flb,
|
flb: formData.flb,
|
||||||
ulb: selectedFormData.ulb,
|
ulb: formData.ulb,
|
||||||
transcendence: selectedFormData.transcendence,
|
transcendence: formData.transcendence,
|
||||||
subaura: selectedFormData.subaura,
|
subaura: formData.subaura,
|
||||||
limit: selectedFormData.limit,
|
limit: formData.limit,
|
||||||
release_date: selectedFormData.releaseDate || null,
|
release_date: formData.releaseDate || null,
|
||||||
flb_date: selectedFormData.flbDate || null,
|
flb_date: formData.flbDate || null,
|
||||||
ulb_date: selectedFormData.ulbDate || null,
|
ulb_date: formData.ulbDate || null,
|
||||||
transcendence_date: selectedFormData.transcendenceDate || null,
|
transcendence_date: formData.transcendenceDate || null,
|
||||||
wiki_en: selectedFormData.wikiEn,
|
wiki_en: formData.wikiEn,
|
||||||
wiki_ja: selectedFormData.wikiJa,
|
wiki_ja: formData.wikiJa,
|
||||||
gamewith: selectedFormData.gamewith,
|
gamewith: formData.gamewith,
|
||||||
kamigame: selectedFormData.kamigame,
|
kamigame: formData.kamigame,
|
||||||
nicknames_en: selectedFormData.nicknamesEn,
|
nicknames_en: formData.nicknamesEn,
|
||||||
nicknames_jp: selectedFormData.nicknamesJp
|
nicknames_jp: formData.nicknamesJp
|
||||||
}
|
}
|
||||||
|
|
||||||
await entityAdapter.createSummon(payload)
|
await entityAdapter.createSummon(payload)
|
||||||
|
|
@ -269,12 +278,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can save current entity
|
// Can save current entity
|
||||||
const canSave = $derived(
|
const canSave = $derived.by(() => {
|
||||||
selectedFormData &&
|
if (!selectedWikiPage) return false
|
||||||
selectedFormData.name.trim() !== '' &&
|
const formData = formDataMap.get(selectedWikiPage)
|
||||||
selectedFormData.granblue_id.trim() !== '' &&
|
if (!formData) return false
|
||||||
!savedEntities.has(selectedWikiPage ?? '')
|
return (
|
||||||
)
|
formData.name.trim() !== '' &&
|
||||||
|
formData.granblue_id.trim() !== '' &&
|
||||||
|
!savedEntities.has(selectedWikiPage)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
// All entities saved
|
// All entities saved
|
||||||
const allSaved = $derived(
|
const allSaved = $derived(
|
||||||
|
|
@ -352,14 +365,15 @@
|
||||||
<div class="entity-loading">
|
<div class="entity-loading">
|
||||||
<p>Loading wiki data...</p>
|
<p>Loading wiki data...</p>
|
||||||
</div>
|
</div>
|
||||||
{:else if selectedFormData}
|
{:else if selectedWikiPage && formDataMap.has(selectedWikiPage)}
|
||||||
|
{@const formData = formDataMap.get(selectedWikiPage)!}
|
||||||
{@const suggestions = selectedEntity.suggestions}
|
{@const suggestions = selectedEntity.suggestions}
|
||||||
{@const dismissed = selectedDismissed}
|
{@const dismissed = dismissedSuggestionsMap.get(selectedWikiPage) ?? new Set<string>()}
|
||||||
<section class="details">
|
<section class="details">
|
||||||
<DetailsContainer title="Basic Info">
|
<DetailsContainer title="Basic Info">
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Name (EN)"
|
label="Name (EN)"
|
||||||
bind:value={selectedFormData.name}
|
bind:value={formData.name}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Summon name"
|
placeholder="Summon name"
|
||||||
|
|
@ -370,7 +384,7 @@
|
||||||
/>
|
/>
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Name (JP)"
|
label="Name (JP)"
|
||||||
bind:value={selectedFormData.nameJp}
|
bind:value={formData.nameJp}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="召喚石名"
|
placeholder="召喚石名"
|
||||||
|
|
@ -382,7 +396,7 @@
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Summon ID"
|
label="Summon ID"
|
||||||
sublabel="Internal game identifier (if known)"
|
sublabel="Internal game identifier (if known)"
|
||||||
bind:value={selectedFormData.summonId}
|
bind:value={formData.summonId}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Optional"
|
placeholder="Optional"
|
||||||
|
|
@ -392,7 +406,7 @@
|
||||||
<SummonMetadataSection
|
<SummonMetadataSection
|
||||||
summon={emptySummon}
|
summon={emptySummon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -402,7 +416,7 @@
|
||||||
<SummonUncapSection
|
<SummonUncapSection
|
||||||
summon={emptySummon}
|
summon={emptySummon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -412,7 +426,7 @@
|
||||||
<SummonTaxonomySection
|
<SummonTaxonomySection
|
||||||
summon={emptySummon}
|
summon={emptySummon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -422,7 +436,7 @@
|
||||||
<SummonStatsSection
|
<SummonStatsSection
|
||||||
summon={emptySummon}
|
summon={emptySummon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -431,17 +445,17 @@
|
||||||
|
|
||||||
<DetailsContainer title="Nicknames">
|
<DetailsContainer title="Nicknames">
|
||||||
<DetailItem label="Nicknames (EN)">
|
<DetailItem label="Nicknames (EN)">
|
||||||
<TagInput bind:value={selectedFormData.nicknamesEn} placeholder="Add nickname..." contained />
|
<TagInput bind:value={formData.nicknamesEn} placeholder="Add nickname..." contained />
|
||||||
</DetailItem>
|
</DetailItem>
|
||||||
<DetailItem label="Nicknames (JP)">
|
<DetailItem label="Nicknames (JP)">
|
||||||
<TagInput bind:value={selectedFormData.nicknamesJp} placeholder="ニックネーム..." contained />
|
<TagInput bind:value={formData.nicknamesJp} placeholder="ニックネーム..." contained />
|
||||||
</DetailItem>
|
</DetailItem>
|
||||||
</DetailsContainer>
|
</DetailsContainer>
|
||||||
|
|
||||||
<DetailsContainer title="Dates">
|
<DetailsContainer title="Dates">
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Release Date"
|
label="Release Date"
|
||||||
bind:value={selectedFormData.releaseDate}
|
bind:value={formData.releaseDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -450,10 +464,10 @@
|
||||||
onAcceptSuggestion={() => handleAcceptSuggestion('releaseDate', suggestions?.releaseDate)}
|
onAcceptSuggestion={() => handleAcceptSuggestion('releaseDate', suggestions?.releaseDate)}
|
||||||
onDismissSuggestion={() => handleDismissSuggestion('releaseDate')}
|
onDismissSuggestion={() => handleDismissSuggestion('releaseDate')}
|
||||||
/>
|
/>
|
||||||
{#if selectedFormData.flb}
|
{#if formData.flb}
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="FLB Date"
|
label="FLB Date"
|
||||||
bind:value={selectedFormData.flbDate}
|
bind:value={formData.flbDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -463,10 +477,10 @@
|
||||||
onDismissSuggestion={() => handleDismissSuggestion('flbDate')}
|
onDismissSuggestion={() => handleDismissSuggestion('flbDate')}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
{#if selectedFormData.ulb}
|
{#if formData.ulb}
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="ULB Date"
|
label="ULB Date"
|
||||||
bind:value={selectedFormData.ulbDate}
|
bind:value={formData.ulbDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -476,10 +490,10 @@
|
||||||
onDismissSuggestion={() => handleDismissSuggestion('ulbDate')}
|
onDismissSuggestion={() => handleDismissSuggestion('ulbDate')}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
{#if selectedFormData.transcendence}
|
{#if formData.transcendence}
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Transcendence Date"
|
label="Transcendence Date"
|
||||||
bind:value={selectedFormData.transcendenceDate}
|
bind:value={formData.transcendenceDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -490,7 +504,7 @@
|
||||||
<DetailsContainer title="Links">
|
<DetailsContainer title="Links">
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Wiki (EN)"
|
label="Wiki (EN)"
|
||||||
bind:value={selectedFormData.wikiEn}
|
bind:value={formData.wikiEn}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://gbf.wiki/..."
|
placeholder="https://gbf.wiki/..."
|
||||||
|
|
@ -498,7 +512,7 @@
|
||||||
/>
|
/>
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Wiki (JP)"
|
label="Wiki (JP)"
|
||||||
bind:value={selectedFormData.wikiJa}
|
bind:value={formData.wikiJa}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://gbf-wiki.com/..."
|
placeholder="https://gbf-wiki.com/..."
|
||||||
|
|
@ -506,7 +520,7 @@
|
||||||
/>
|
/>
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Gamewith"
|
label="Gamewith"
|
||||||
bind:value={selectedFormData.gamewith}
|
bind:value={formData.gamewith}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://..."
|
placeholder="https://..."
|
||||||
|
|
@ -518,7 +532,7 @@
|
||||||
/>
|
/>
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Kamigame"
|
label="Kamigame"
|
||||||
bind:value={selectedFormData.kamigame}
|
bind:value={formData.kamigame}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://..."
|
placeholder="https://..."
|
||||||
|
|
|
||||||
|
|
@ -69,10 +69,6 @@
|
||||||
|
|
||||||
// Get selected entity data
|
// Get selected entity data
|
||||||
const selectedEntity = $derived(selectedWikiPage ? entities.get(selectedWikiPage) : null)
|
const selectedEntity = $derived(selectedWikiPage ? entities.get(selectedWikiPage) : null)
|
||||||
const selectedFormData = $derived(selectedWikiPage ? formDataMap.get(selectedWikiPage) : null)
|
|
||||||
const selectedDismissed = $derived(
|
|
||||||
selectedWikiPage ? dismissedSuggestionsMap.get(selectedWikiPage) ?? new Set() : new Set()
|
|
||||||
)
|
|
||||||
|
|
||||||
// Entity tabs for TabbedEntitySelector
|
// Entity tabs for TabbedEntitySelector
|
||||||
const entityTabs = $derived<EntityTab[]>(
|
const entityTabs = $derived<EntityTab[]>(
|
||||||
|
|
@ -81,8 +77,8 @@
|
||||||
granblueId: entity.granblueId,
|
granblueId: entity.granblueId,
|
||||||
status: entity.status,
|
status: entity.status,
|
||||||
imageUrl: entity.granblueId
|
imageUrl: entity.granblueId
|
||||||
? getWeaponImage(entity.granblueId)
|
? getWeaponImage(entity.granblueId, 'square')
|
||||||
: '/images/placeholders/placeholder-weapon-grid.png',
|
: '/images/placeholders/placeholder-weapon-square.png',
|
||||||
error: entity.error,
|
error: entity.error,
|
||||||
saved: savedEntities.has(wikiPage)
|
saved: savedEntities.has(wikiPage)
|
||||||
}))
|
}))
|
||||||
|
|
@ -147,11 +143,11 @@
|
||||||
fetchError = null
|
fetchError = null
|
||||||
|
|
||||||
// Initialize entities as loading
|
// Initialize entities as loading
|
||||||
const newEntities = new Map<string, BatchPreviewResult<WeaponSuggestions>>()
|
const newEntities = new Map<string, EntityState>()
|
||||||
pages.forEach((page) => {
|
pages.forEach((page) => {
|
||||||
newEntities.set(page, {
|
newEntities.set(page, {
|
||||||
wikiPage: page,
|
wikiPage: page,
|
||||||
status: 'loading' as const
|
status: 'loading'
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
entities = newEntities
|
entities = newEntities
|
||||||
|
|
@ -161,15 +157,21 @@
|
||||||
const response = await entityAdapter.batchPreviewWeapons(pages)
|
const response = await entityAdapter.batchPreviewWeapons(pages)
|
||||||
|
|
||||||
// Update entities with results
|
// Update entities with results
|
||||||
const updatedEntities = new Map<string, BatchPreviewResult<WeaponSuggestions>>()
|
const updatedEntities = new Map<string, EntityState>()
|
||||||
response.results.forEach((result) => {
|
response.results.forEach((result) => {
|
||||||
updatedEntities.set(result.wikiPage, result)
|
updatedEntities.set(result.wikiPage, {
|
||||||
|
wikiPage: result.wikiPage,
|
||||||
|
status: result.status,
|
||||||
|
granblueId: result.granblueId,
|
||||||
|
suggestions: result.suggestions,
|
||||||
|
error: result.error
|
||||||
|
})
|
||||||
|
|
||||||
// Create form data for successful results
|
// Create form data for successful results
|
||||||
if (result.status === 'success') {
|
if (result.status === 'success') {
|
||||||
const formData = createEmptyFormData(result.wikiPage, result.suggestions)
|
const formData = createEmptyFormData(result.wikiPage, result.suggestions)
|
||||||
formDataMap.set(result.wikiPage, formData)
|
formDataMap.set(result.wikiPage, formData)
|
||||||
dismissedSuggestionsMap.set(result.wikiPage, new Set())
|
dismissedSuggestionsMap.set(result.wikiPage, new Set<string>())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
entities = updatedEntities
|
entities = updatedEntities
|
||||||
|
|
@ -192,7 +194,7 @@
|
||||||
|
|
||||||
// Accept a suggestion
|
// Accept a suggestion
|
||||||
function handleAcceptSuggestion(field: string, value: any) {
|
function handleAcceptSuggestion(field: string, value: any) {
|
||||||
if (!selectedWikiPage || !selectedFormData) return
|
if (!selectedWikiPage) return
|
||||||
|
|
||||||
const formData = formDataMap.get(selectedWikiPage)
|
const formData = formDataMap.get(selectedWikiPage)
|
||||||
if (formData) {
|
if (formData) {
|
||||||
|
|
@ -212,49 +214,51 @@
|
||||||
|
|
||||||
// Save current entity
|
// Save current entity
|
||||||
async function saveCurrentEntity() {
|
async function saveCurrentEntity() {
|
||||||
if (!selectedWikiPage || !selectedFormData) return
|
if (!selectedWikiPage) return
|
||||||
|
const formData = formDataMap.get(selectedWikiPage)
|
||||||
|
if (!formData) return
|
||||||
|
|
||||||
isSaving = true
|
isSaving = true
|
||||||
saveError = null
|
saveError = null
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const payload = {
|
const payload = {
|
||||||
granblue_id: selectedFormData.granblue_id,
|
granblue_id: formData.granblue_id,
|
||||||
name_en: selectedFormData.name,
|
name_en: formData.name,
|
||||||
name_jp: selectedFormData.nameJp || undefined,
|
name_jp: formData.nameJp || undefined,
|
||||||
rarity: selectedFormData.rarity,
|
rarity: formData.rarity,
|
||||||
element: selectedFormData.element,
|
element: formData.element,
|
||||||
proficiency: selectedFormData.proficiency,
|
proficiency: formData.proficiency,
|
||||||
series: selectedFormData.series || undefined,
|
series: formData.series || undefined,
|
||||||
new_series: selectedFormData.newSeries || undefined,
|
new_series: formData.newSeries || undefined,
|
||||||
min_hp: selectedFormData.minHp,
|
min_hp: formData.minHp,
|
||||||
max_hp: selectedFormData.maxHp,
|
max_hp: formData.maxHp,
|
||||||
max_hp_flb: selectedFormData.maxHpFlb,
|
max_hp_flb: formData.maxHpFlb,
|
||||||
max_hp_ulb: selectedFormData.maxHpUlb,
|
max_hp_ulb: formData.maxHpUlb,
|
||||||
min_atk: selectedFormData.minAtk,
|
min_atk: formData.minAtk,
|
||||||
max_atk: selectedFormData.maxAtk,
|
max_atk: formData.maxAtk,
|
||||||
max_atk_flb: selectedFormData.maxAtkFlb,
|
max_atk_flb: formData.maxAtkFlb,
|
||||||
max_atk_ulb: selectedFormData.maxAtkUlb,
|
max_atk_ulb: formData.maxAtkUlb,
|
||||||
max_level: selectedFormData.maxLevel,
|
max_level: formData.maxLevel,
|
||||||
max_skill_level: selectedFormData.maxSkillLevel,
|
max_skill_level: formData.maxSkillLevel,
|
||||||
max_awakening_level: selectedFormData.maxAwakeningLevel,
|
max_awakening_level: formData.maxAwakeningLevel,
|
||||||
flb: selectedFormData.flb,
|
flb: formData.flb,
|
||||||
ulb: selectedFormData.ulb,
|
ulb: formData.ulb,
|
||||||
transcendence: selectedFormData.transcendence,
|
transcendence: formData.transcendence,
|
||||||
extra: selectedFormData.extra,
|
extra: formData.extra,
|
||||||
limit: selectedFormData.limit,
|
limit: formData.limit,
|
||||||
ax: selectedFormData.ax,
|
ax: formData.ax,
|
||||||
release_date: selectedFormData.releaseDate || null,
|
release_date: formData.releaseDate || null,
|
||||||
flb_date: selectedFormData.flbDate || null,
|
flb_date: formData.flbDate || null,
|
||||||
ulb_date: selectedFormData.ulbDate || null,
|
ulb_date: formData.ulbDate || null,
|
||||||
transcendence_date: selectedFormData.transcendenceDate || null,
|
transcendence_date: formData.transcendenceDate || null,
|
||||||
wiki_en: selectedFormData.wikiEn,
|
wiki_en: formData.wikiEn,
|
||||||
wiki_ja: selectedFormData.wikiJa,
|
wiki_ja: formData.wikiJa,
|
||||||
gamewith: selectedFormData.gamewith,
|
gamewith: formData.gamewith,
|
||||||
kamigame: selectedFormData.kamigame,
|
kamigame: formData.kamigame,
|
||||||
nicknames_en: selectedFormData.nicknamesEn,
|
nicknames_en: formData.nicknamesEn,
|
||||||
nicknames_jp: selectedFormData.nicknamesJp,
|
nicknames_jp: formData.nicknamesJp,
|
||||||
recruits: selectedFormData.recruits
|
recruits: formData.recruits
|
||||||
}
|
}
|
||||||
|
|
||||||
await entityAdapter.createWeapon(payload)
|
await entityAdapter.createWeapon(payload)
|
||||||
|
|
@ -279,12 +283,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can save current entity
|
// Can save current entity
|
||||||
const canSave = $derived(
|
const canSave = $derived.by(() => {
|
||||||
selectedFormData &&
|
if (!selectedWikiPage) return false
|
||||||
selectedFormData.name.trim() !== '' &&
|
const formData = formDataMap.get(selectedWikiPage)
|
||||||
selectedFormData.granblue_id.trim() !== '' &&
|
if (!formData) return false
|
||||||
!savedEntities.has(selectedWikiPage ?? '')
|
return (
|
||||||
)
|
formData.name.trim() !== '' &&
|
||||||
|
formData.granblue_id.trim() !== '' &&
|
||||||
|
!savedEntities.has(selectedWikiPage)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
// All entities saved
|
// All entities saved
|
||||||
const allSaved = $derived(
|
const allSaved = $derived(
|
||||||
|
|
@ -362,14 +370,15 @@
|
||||||
<div class="entity-loading">
|
<div class="entity-loading">
|
||||||
<p>Loading wiki data...</p>
|
<p>Loading wiki data...</p>
|
||||||
</div>
|
</div>
|
||||||
{:else if selectedFormData}
|
{:else if selectedWikiPage && formDataMap.has(selectedWikiPage)}
|
||||||
|
{@const formData = formDataMap.get(selectedWikiPage)!}
|
||||||
{@const suggestions = selectedEntity.suggestions}
|
{@const suggestions = selectedEntity.suggestions}
|
||||||
{@const dismissed = selectedDismissed}
|
{@const dismissed = dismissedSuggestionsMap.get(selectedWikiPage) ?? new Set<string>()}
|
||||||
<section class="details">
|
<section class="details">
|
||||||
<DetailsContainer title="Basic Info">
|
<DetailsContainer title="Basic Info">
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Name (EN)"
|
label="Name (EN)"
|
||||||
bind:value={selectedFormData.name}
|
bind:value={formData.name}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="Weapon name"
|
placeholder="Weapon name"
|
||||||
|
|
@ -380,7 +389,7 @@
|
||||||
/>
|
/>
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Name (JP)"
|
label="Name (JP)"
|
||||||
bind:value={selectedFormData.nameJp}
|
bind:value={formData.nameJp}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="武器名"
|
placeholder="武器名"
|
||||||
|
|
@ -394,7 +403,7 @@
|
||||||
<WeaponMetadataSection
|
<WeaponMetadataSection
|
||||||
weapon={emptyWeapon}
|
weapon={emptyWeapon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -404,7 +413,7 @@
|
||||||
<WeaponUncapSection
|
<WeaponUncapSection
|
||||||
weapon={emptyWeapon}
|
weapon={emptyWeapon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -414,7 +423,7 @@
|
||||||
<WeaponTaxonomySection
|
<WeaponTaxonomySection
|
||||||
weapon={emptyWeapon}
|
weapon={emptyWeapon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -424,7 +433,7 @@
|
||||||
<WeaponStatsSection
|
<WeaponStatsSection
|
||||||
weapon={emptyWeapon}
|
weapon={emptyWeapon}
|
||||||
editMode={true}
|
editMode={true}
|
||||||
bind:editData={selectedFormData}
|
editData={formData}
|
||||||
{suggestions}
|
{suggestions}
|
||||||
dismissedSuggestions={dismissed}
|
dismissedSuggestions={dismissed}
|
||||||
onAcceptSuggestion={handleAcceptSuggestion}
|
onAcceptSuggestion={handleAcceptSuggestion}
|
||||||
|
|
@ -433,23 +442,23 @@
|
||||||
|
|
||||||
<DetailsContainer title="Nicknames">
|
<DetailsContainer title="Nicknames">
|
||||||
<DetailItem label="Nicknames (EN)">
|
<DetailItem label="Nicknames (EN)">
|
||||||
<TagInput bind:value={selectedFormData.nicknamesEn} placeholder="Add nickname..." contained />
|
<TagInput bind:value={formData.nicknamesEn} placeholder="Add nickname..." contained />
|
||||||
</DetailItem>
|
</DetailItem>
|
||||||
<DetailItem label="Nicknames (JP)">
|
<DetailItem label="Nicknames (JP)">
|
||||||
<TagInput bind:value={selectedFormData.nicknamesJp} placeholder="ニックネーム..." contained />
|
<TagInput bind:value={formData.nicknamesJp} placeholder="ニックネーム..." contained />
|
||||||
</DetailItem>
|
</DetailItem>
|
||||||
</DetailsContainer>
|
</DetailsContainer>
|
||||||
|
|
||||||
<DetailsContainer title="Recruits">
|
<DetailsContainer title="Recruits">
|
||||||
<DetailItem label="Recruits Character" sublabel="Character recruited by this weapon">
|
<DetailItem label="Recruits Character" sublabel="Character recruited by this weapon">
|
||||||
<CharacterTypeahead bind:value={selectedFormData.recruits} placeholder="Search for character..." />
|
<CharacterTypeahead bind:value={formData.recruits} placeholder="Search for character..." />
|
||||||
</DetailItem>
|
</DetailItem>
|
||||||
</DetailsContainer>
|
</DetailsContainer>
|
||||||
|
|
||||||
<DetailsContainer title="Dates">
|
<DetailsContainer title="Dates">
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Release Date"
|
label="Release Date"
|
||||||
bind:value={selectedFormData.releaseDate}
|
bind:value={formData.releaseDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -458,10 +467,10 @@
|
||||||
onAcceptSuggestion={() => handleAcceptSuggestion('releaseDate', suggestions?.releaseDate)}
|
onAcceptSuggestion={() => handleAcceptSuggestion('releaseDate', suggestions?.releaseDate)}
|
||||||
onDismissSuggestion={() => handleDismissSuggestion('releaseDate')}
|
onDismissSuggestion={() => handleDismissSuggestion('releaseDate')}
|
||||||
/>
|
/>
|
||||||
{#if selectedFormData.flb}
|
{#if formData.flb}
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="FLB Date"
|
label="FLB Date"
|
||||||
bind:value={selectedFormData.flbDate}
|
bind:value={formData.flbDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -471,10 +480,10 @@
|
||||||
onDismissSuggestion={() => handleDismissSuggestion('flbDate')}
|
onDismissSuggestion={() => handleDismissSuggestion('flbDate')}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
{#if selectedFormData.ulb}
|
{#if formData.ulb}
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="ULB Date"
|
label="ULB Date"
|
||||||
bind:value={selectedFormData.ulbDate}
|
bind:value={formData.ulbDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -484,10 +493,10 @@
|
||||||
onDismissSuggestion={() => handleDismissSuggestion('ulbDate')}
|
onDismissSuggestion={() => handleDismissSuggestion('ulbDate')}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
{#if selectedFormData.transcendence}
|
{#if formData.transcendence}
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Transcendence Date"
|
label="Transcendence Date"
|
||||||
bind:value={selectedFormData.transcendenceDate}
|
bind:value={formData.transcendenceDate}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="YYYY-MM-DD"
|
placeholder="YYYY-MM-DD"
|
||||||
|
|
@ -498,7 +507,7 @@
|
||||||
<DetailsContainer title="Links">
|
<DetailsContainer title="Links">
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Wiki (EN)"
|
label="Wiki (EN)"
|
||||||
bind:value={selectedFormData.wikiEn}
|
bind:value={formData.wikiEn}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://gbf.wiki/..."
|
placeholder="https://gbf.wiki/..."
|
||||||
|
|
@ -506,7 +515,7 @@
|
||||||
/>
|
/>
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Wiki (JP)"
|
label="Wiki (JP)"
|
||||||
bind:value={selectedFormData.wikiJa}
|
bind:value={formData.wikiJa}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://gbf-wiki.com/..."
|
placeholder="https://gbf-wiki.com/..."
|
||||||
|
|
@ -514,7 +523,7 @@
|
||||||
/>
|
/>
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Gamewith"
|
label="Gamewith"
|
||||||
bind:value={selectedFormData.gamewith}
|
bind:value={formData.gamewith}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://..."
|
placeholder="https://..."
|
||||||
|
|
@ -526,7 +535,7 @@
|
||||||
/>
|
/>
|
||||||
<SuggestionDetailItem
|
<SuggestionDetailItem
|
||||||
label="Kamigame"
|
label="Kamigame"
|
||||||
bind:value={selectedFormData.kamigame}
|
bind:value={formData.kamigame}
|
||||||
editable={true}
|
editable={true}
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="https://..."
|
placeholder="https://..."
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue