fix raid form saving + add IDs section
This commit is contained in:
parent
5bc1869715
commit
76ef2e575b
3 changed files with 48 additions and 28 deletions
|
|
@ -45,7 +45,7 @@ export interface CreateRaidInput {
|
||||||
name_en: string
|
name_en: string
|
||||||
name_jp: string
|
name_jp: string
|
||||||
slug: string
|
slug: string
|
||||||
level: number
|
level?: number
|
||||||
element: number
|
element: number
|
||||||
group_id: string
|
group_id: string
|
||||||
enemy_id?: number
|
enemy_id?: number
|
||||||
|
|
|
||||||
|
|
@ -50,12 +50,12 @@
|
||||||
let isSaving = $state(false)
|
let isSaving = $state(false)
|
||||||
let saveError = $state<string | null>(null)
|
let saveError = $state<string | null>(null)
|
||||||
|
|
||||||
// Edit data state
|
// Edit data state - use undefined for nullable number fields to avoid validation issues
|
||||||
let editData = $state({
|
let editData = $state({
|
||||||
name_en: '',
|
name_en: '',
|
||||||
name_jp: '',
|
name_jp: '',
|
||||||
slug: '',
|
slug: '',
|
||||||
level: 0,
|
level: undefined as number | undefined,
|
||||||
element: 0,
|
element: 0,
|
||||||
group_id: '',
|
group_id: '',
|
||||||
enemy_id: undefined as number | undefined,
|
enemy_id: undefined as number | undefined,
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
name_en: raid.name.en || '',
|
name_en: raid.name.en || '',
|
||||||
name_jp: raid.name.ja || '',
|
name_jp: raid.name.ja || '',
|
||||||
slug: raid.slug || '',
|
slug: raid.slug || '',
|
||||||
level: raid.level ?? 0,
|
level: raid.level,
|
||||||
element: raid.element ?? 0,
|
element: raid.element ?? 0,
|
||||||
group_id: raid.group?.id || '',
|
group_id: raid.group?.id || '',
|
||||||
enemy_id: raid.enemy_id,
|
enemy_id: raid.enemy_id,
|
||||||
|
|
@ -104,6 +104,13 @@
|
||||||
editData.name_en.trim() !== '' && editData.slug.trim() !== '' && editData.group_id !== ''
|
editData.name_en.trim() !== '' && editData.slug.trim() !== '' && editData.group_id !== ''
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Helper to convert empty strings to undefined for number fields
|
||||||
|
function toNumberOrUndefined(value: number | string | undefined): number | undefined {
|
||||||
|
if (value === '' || value === undefined || value === null) return undefined
|
||||||
|
const num = typeof value === 'string' ? parseInt(value, 10) : value
|
||||||
|
return isNaN(num) ? undefined : num
|
||||||
|
}
|
||||||
|
|
||||||
// Save changes
|
// Save changes
|
||||||
async function handleSave() {
|
async function handleSave() {
|
||||||
if (!canSave || !raid || !raidSlug) return
|
if (!canSave || !raid || !raidSlug) return
|
||||||
|
|
@ -116,12 +123,12 @@
|
||||||
name_en: editData.name_en,
|
name_en: editData.name_en,
|
||||||
name_jp: editData.name_jp,
|
name_jp: editData.name_jp,
|
||||||
slug: editData.slug,
|
slug: editData.slug,
|
||||||
level: editData.level,
|
level: toNumberOrUndefined(editData.level),
|
||||||
element: editData.element,
|
element: editData.element,
|
||||||
group_id: editData.group_id,
|
group_id: editData.group_id,
|
||||||
enemy_id: editData.enemy_id,
|
enemy_id: toNumberOrUndefined(editData.enemy_id),
|
||||||
summon_id: editData.summon_id,
|
summon_id: toNumberOrUndefined(editData.summon_id),
|
||||||
quest_id: editData.quest_id
|
quest_id: toNumberOrUndefined(editData.quest_id)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Invalidate queries
|
// Invalidate queries
|
||||||
|
|
@ -192,6 +199,16 @@
|
||||||
editable={true}
|
editable={true}
|
||||||
type="number"
|
type="number"
|
||||||
/>
|
/>
|
||||||
|
<DetailItem
|
||||||
|
label="Element"
|
||||||
|
bind:value={editData.element}
|
||||||
|
editable={true}
|
||||||
|
type="select"
|
||||||
|
options={elementOptions}
|
||||||
|
/>
|
||||||
|
</DetailsContainer>
|
||||||
|
|
||||||
|
<DetailsContainer title="IDs">
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Enemy ID"
|
label="Enemy ID"
|
||||||
bind:value={editData.enemy_id}
|
bind:value={editData.enemy_id}
|
||||||
|
|
@ -210,13 +227,6 @@
|
||||||
editable={true}
|
editable={true}
|
||||||
type="number"
|
type="number"
|
||||||
/>
|
/>
|
||||||
<DetailItem
|
|
||||||
label="Element"
|
|
||||||
bind:value={editData.element}
|
|
||||||
editable={true}
|
|
||||||
type="select"
|
|
||||||
options={elementOptions}
|
|
||||||
/>
|
|
||||||
</DetailsContainer>
|
</DetailsContainer>
|
||||||
|
|
||||||
<DetailsContainer title="Classification">
|
<DetailsContainer title="Classification">
|
||||||
|
|
|
||||||
|
|
@ -37,12 +37,12 @@
|
||||||
let isSaving = $state(false)
|
let isSaving = $state(false)
|
||||||
let saveError = $state<string | null>(null)
|
let saveError = $state<string | null>(null)
|
||||||
|
|
||||||
// Edit data state
|
// Edit data state - use undefined for nullable number fields to avoid validation issues
|
||||||
let editData = $state({
|
let editData = $state({
|
||||||
name_en: '',
|
name_en: '',
|
||||||
name_jp: '',
|
name_jp: '',
|
||||||
slug: '',
|
slug: '',
|
||||||
level: 0,
|
level: undefined as number | undefined,
|
||||||
element: 0,
|
element: 0,
|
||||||
group_id: '',
|
group_id: '',
|
||||||
enemy_id: undefined as number | undefined,
|
enemy_id: undefined as number | undefined,
|
||||||
|
|
@ -74,6 +74,13 @@
|
||||||
editData.name_en.trim() !== '' && editData.slug.trim() !== '' && editData.group_id !== ''
|
editData.name_en.trim() !== '' && editData.slug.trim() !== '' && editData.group_id !== ''
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Helper to convert empty strings to undefined for number fields
|
||||||
|
function toNumberOrUndefined(value: number | string | undefined): number | undefined {
|
||||||
|
if (value === '' || value === undefined || value === null) return undefined
|
||||||
|
const num = typeof value === 'string' ? parseInt(value, 10) : value
|
||||||
|
return isNaN(num) ? undefined : num
|
||||||
|
}
|
||||||
|
|
||||||
// Create raid
|
// Create raid
|
||||||
async function handleSave() {
|
async function handleSave() {
|
||||||
if (!canSave) return
|
if (!canSave) return
|
||||||
|
|
@ -86,12 +93,12 @@
|
||||||
name_en: editData.name_en,
|
name_en: editData.name_en,
|
||||||
name_jp: editData.name_jp,
|
name_jp: editData.name_jp,
|
||||||
slug: editData.slug,
|
slug: editData.slug,
|
||||||
level: editData.level,
|
level: toNumberOrUndefined(editData.level),
|
||||||
element: editData.element,
|
element: editData.element,
|
||||||
group_id: editData.group_id,
|
group_id: editData.group_id,
|
||||||
enemy_id: editData.enemy_id,
|
enemy_id: toNumberOrUndefined(editData.enemy_id),
|
||||||
summon_id: editData.summon_id,
|
summon_id: toNumberOrUndefined(editData.summon_id),
|
||||||
quest_id: editData.quest_id
|
quest_id: toNumberOrUndefined(editData.quest_id)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Invalidate queries
|
// Invalidate queries
|
||||||
|
|
@ -157,6 +164,16 @@
|
||||||
editable={true}
|
editable={true}
|
||||||
type="number"
|
type="number"
|
||||||
/>
|
/>
|
||||||
|
<DetailItem
|
||||||
|
label="Element"
|
||||||
|
bind:value={editData.element}
|
||||||
|
editable={true}
|
||||||
|
type="select"
|
||||||
|
options={elementOptions}
|
||||||
|
/>
|
||||||
|
</DetailsContainer>
|
||||||
|
|
||||||
|
<DetailsContainer title="IDs">
|
||||||
<DetailItem
|
<DetailItem
|
||||||
label="Enemy ID"
|
label="Enemy ID"
|
||||||
bind:value={editData.enemy_id}
|
bind:value={editData.enemy_id}
|
||||||
|
|
@ -175,13 +192,6 @@
|
||||||
editable={true}
|
editable={true}
|
||||||
type="number"
|
type="number"
|
||||||
/>
|
/>
|
||||||
<DetailItem
|
|
||||||
label="Element"
|
|
||||||
bind:value={editData.element}
|
|
||||||
editable={true}
|
|
||||||
type="select"
|
|
||||||
options={elementOptions}
|
|
||||||
/>
|
|
||||||
</DetailsContainer>
|
</DetailsContainer>
|
||||||
|
|
||||||
<DetailsContainer title="Classification">
|
<DetailsContainer title="Classification">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue