update conflict dialog and database pages for series objects
This commit is contained in:
parent
139e602808
commit
166ef8ff6f
3 changed files with 28 additions and 17 deletions
|
|
@ -24,7 +24,7 @@
|
|||
import type { Character, Weapon } from '$lib/types/api/entities'
|
||||
import { useResolveCharacterConflict, useResolveWeaponConflict } from '$lib/api/mutations/grid.mutations'
|
||||
import { getCharacterImageWithPose, getWeaponImage } from '$lib/utils/images'
|
||||
import { getWeaponSeriesSlug, isOpusDraconicSeries } from '$lib/utils/weaponSeries'
|
||||
import { isOpusDraconicSeries, getSeriesDisplayName } from '$lib/utils/weaponSeries'
|
||||
import { getLocale } from '$lib/paraglide/runtime.js'
|
||||
import * as m from '$lib/paraglide/messages'
|
||||
|
||||
|
|
@ -78,11 +78,8 @@
|
|||
return m.conflict_weapon_opus_draconic()
|
||||
}
|
||||
|
||||
// Get series name for message
|
||||
const seriesSlug = getWeaponSeriesSlug(weapon.series)
|
||||
|
||||
// Use the series slug directly for now - proper i18n can be added later
|
||||
const seriesName = seriesSlug?.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase()) || 'Unknown'
|
||||
// Get series name for message - use localized name from series object
|
||||
const seriesName = getSeriesDisplayName(weapon.series, locale)
|
||||
|
||||
return m.conflict_weapon_series({ series: seriesName })
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
<svelte:options runes={true} />
|
||||
|
||||
<script lang="ts">
|
||||
import { createQuery } from '@tanstack/svelte-query'
|
||||
import type { WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
|
||||
import { entityQueries } from '$lib/api/queries/entity.queries'
|
||||
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
|
||||
import DetailItem from '$lib/components/ui/DetailItem.svelte'
|
||||
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
|
||||
|
|
@ -9,7 +11,8 @@
|
|||
import ProficiencyLabel from '$lib/components/labels/ProficiencyLabel.svelte'
|
||||
import { getElementLabel, getElementOptions } from '$lib/utils/element'
|
||||
import { getProficiencyOptions } from '$lib/utils/proficiency'
|
||||
import { getWeaponSeriesOptions, getWeaponSeriesSlug } from '$lib/utils/weaponSeries'
|
||||
import { getSeriesDisplayName } from '$lib/utils/weaponSeries'
|
||||
import { isWeaponSeriesRef, type WeaponSeriesRef } from '$lib/types/api/weaponSeries'
|
||||
import { PROMOTION_NAMES, getPromotionNames } from '$lib/types/enums'
|
||||
|
||||
type ElementName = 'wind' | 'fire' | 'water' | 'earth' | 'dark' | 'light'
|
||||
|
|
@ -35,9 +38,24 @@
|
|||
onDismissSuggestion
|
||||
}: Props = $props()
|
||||
|
||||
// Fetch weapon series list from API
|
||||
const weaponSeriesQuery = createQuery(() => entityQueries.weaponSeriesList())
|
||||
|
||||
const elementOptions = getElementOptions()
|
||||
const proficiencyOptions = getProficiencyOptions()
|
||||
const seriesOptions = [{ value: 0, label: 'None' }, ...getWeaponSeriesOptions()]
|
||||
|
||||
// Build series options from fetched data
|
||||
// In edit mode, we need IDs for the select value
|
||||
const seriesOptions = $derived.by(() => {
|
||||
const series = weaponSeriesQuery.data ?? []
|
||||
return [
|
||||
{ value: '', label: 'None' },
|
||||
...series.map((s) => ({
|
||||
value: s.id,
|
||||
label: s.name.en
|
||||
}))
|
||||
]
|
||||
})
|
||||
|
||||
// Promotion options for multiselect
|
||||
const promotionOptions = Object.entries(PROMOTION_NAMES).map(([value, label]) => ({
|
||||
|
|
@ -52,15 +70,10 @@
|
|||
return label !== '—' && label !== 'Null' ? (label.toLowerCase() as ElementName) : undefined
|
||||
})
|
||||
|
||||
// Format series label
|
||||
function formatSeriesLabel(series: number | undefined): string {
|
||||
// Format series label for display mode
|
||||
function formatSeriesLabel(series: WeaponSeriesRef | null | undefined): string {
|
||||
if (!series) return '—'
|
||||
const seriesSlug = getWeaponSeriesSlug(series)
|
||||
if (!seriesSlug) return String(series)
|
||||
return seriesSlug
|
||||
.split('_')
|
||||
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
||||
.join(' ')
|
||||
return getSeriesDisplayName(series, 'en') || '—'
|
||||
}
|
||||
|
||||
// Format promotions for display
|
||||
|
|
|
|||
|
|
@ -93,7 +93,8 @@
|
|||
rarity: weapon.rarity || 3,
|
||||
element: weapon.element || 0,
|
||||
proficiency: weapon.proficiency || 0,
|
||||
series: weapon.series || 0,
|
||||
// Extract series ID from object
|
||||
series: weapon.series?.id || '',
|
||||
minHp: weapon.hp?.minHp || 0,
|
||||
maxHp: weapon.hp?.maxHp || 0,
|
||||
maxHpFlb: weapon.hp?.maxHpFlb || 0,
|
||||
|
|
|
|||
Loading…
Reference in a new issue