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 type { Character, Weapon } from '$lib/types/api/entities'
|
||||||
import { useResolveCharacterConflict, useResolveWeaponConflict } from '$lib/api/mutations/grid.mutations'
|
import { useResolveCharacterConflict, useResolveWeaponConflict } from '$lib/api/mutations/grid.mutations'
|
||||||
import { getCharacterImageWithPose, getWeaponImage } from '$lib/utils/images'
|
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 { getLocale } from '$lib/paraglide/runtime.js'
|
||||||
import * as m from '$lib/paraglide/messages'
|
import * as m from '$lib/paraglide/messages'
|
||||||
|
|
||||||
|
|
@ -78,11 +78,8 @@
|
||||||
return m.conflict_weapon_opus_draconic()
|
return m.conflict_weapon_opus_draconic()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get series name for message
|
// Get series name for message - use localized name from series object
|
||||||
const seriesSlug = getWeaponSeriesSlug(weapon.series)
|
const seriesName = getSeriesDisplayName(weapon.series, locale)
|
||||||
|
|
||||||
// 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'
|
|
||||||
|
|
||||||
return m.conflict_weapon_series({ series: seriesName })
|
return m.conflict_weapon_series({ series: seriesName })
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
<svelte:options runes={true} />
|
<svelte:options runes={true} />
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { createQuery } from '@tanstack/svelte-query'
|
||||||
import type { WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
|
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 DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
|
||||||
import DetailItem from '$lib/components/ui/DetailItem.svelte'
|
import DetailItem from '$lib/components/ui/DetailItem.svelte'
|
||||||
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
|
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
|
||||||
|
|
@ -9,7 +11,8 @@
|
||||||
import ProficiencyLabel from '$lib/components/labels/ProficiencyLabel.svelte'
|
import ProficiencyLabel from '$lib/components/labels/ProficiencyLabel.svelte'
|
||||||
import { getElementLabel, getElementOptions } from '$lib/utils/element'
|
import { getElementLabel, getElementOptions } from '$lib/utils/element'
|
||||||
import { getProficiencyOptions } from '$lib/utils/proficiency'
|
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'
|
import { PROMOTION_NAMES, getPromotionNames } from '$lib/types/enums'
|
||||||
|
|
||||||
type ElementName = 'wind' | 'fire' | 'water' | 'earth' | 'dark' | 'light'
|
type ElementName = 'wind' | 'fire' | 'water' | 'earth' | 'dark' | 'light'
|
||||||
|
|
@ -35,9 +38,24 @@
|
||||||
onDismissSuggestion
|
onDismissSuggestion
|
||||||
}: Props = $props()
|
}: Props = $props()
|
||||||
|
|
||||||
|
// Fetch weapon series list from API
|
||||||
|
const weaponSeriesQuery = createQuery(() => entityQueries.weaponSeriesList())
|
||||||
|
|
||||||
const elementOptions = getElementOptions()
|
const elementOptions = getElementOptions()
|
||||||
const proficiencyOptions = getProficiencyOptions()
|
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
|
// Promotion options for multiselect
|
||||||
const promotionOptions = Object.entries(PROMOTION_NAMES).map(([value, label]) => ({
|
const promotionOptions = Object.entries(PROMOTION_NAMES).map(([value, label]) => ({
|
||||||
|
|
@ -52,15 +70,10 @@
|
||||||
return label !== '—' && label !== 'Null' ? (label.toLowerCase() as ElementName) : undefined
|
return label !== '—' && label !== 'Null' ? (label.toLowerCase() as ElementName) : undefined
|
||||||
})
|
})
|
||||||
|
|
||||||
// Format series label
|
// Format series label for display mode
|
||||||
function formatSeriesLabel(series: number | undefined): string {
|
function formatSeriesLabel(series: WeaponSeriesRef | null | undefined): string {
|
||||||
if (!series) return '—'
|
if (!series) return '—'
|
||||||
const seriesSlug = getWeaponSeriesSlug(series)
|
return getSeriesDisplayName(series, 'en') || '—'
|
||||||
if (!seriesSlug) return String(series)
|
|
||||||
return seriesSlug
|
|
||||||
.split('_')
|
|
||||||
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
||||||
.join(' ')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Format promotions for display
|
// Format promotions for display
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,8 @@
|
||||||
rarity: weapon.rarity || 3,
|
rarity: weapon.rarity || 3,
|
||||||
element: weapon.element || 0,
|
element: weapon.element || 0,
|
||||||
proficiency: weapon.proficiency || 0,
|
proficiency: weapon.proficiency || 0,
|
||||||
series: weapon.series || 0,
|
// Extract series ID from object
|
||||||
|
series: weapon.series?.id || '',
|
||||||
minHp: weapon.hp?.minHp || 0,
|
minHp: weapon.hp?.minHp || 0,
|
||||||
maxHp: weapon.hp?.maxHp || 0,
|
maxHp: weapon.hp?.maxHp || 0,
|
||||||
maxHpFlb: weapon.hp?.maxHpFlb || 0,
|
maxHpFlb: weapon.hp?.maxHpFlb || 0,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue