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_jp: string
|
||||
slug: string
|
||||
level: number
|
||||
level?: number
|
||||
element: number
|
||||
group_id: string
|
||||
enemy_id?: number
|
||||
|
|
|
|||
|
|
@ -50,12 +50,12 @@
|
|||
let isSaving = $state(false)
|
||||
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({
|
||||
name_en: '',
|
||||
name_jp: '',
|
||||
slug: '',
|
||||
level: 0,
|
||||
level: undefined as number | undefined,
|
||||
element: 0,
|
||||
group_id: '',
|
||||
enemy_id: undefined as number | undefined,
|
||||
|
|
@ -70,7 +70,7 @@
|
|||
name_en: raid.name.en || '',
|
||||
name_jp: raid.name.ja || '',
|
||||
slug: raid.slug || '',
|
||||
level: raid.level ?? 0,
|
||||
level: raid.level,
|
||||
element: raid.element ?? 0,
|
||||
group_id: raid.group?.id || '',
|
||||
enemy_id: raid.enemy_id,
|
||||
|
|
@ -104,6 +104,13 @@
|
|||
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
|
||||
async function handleSave() {
|
||||
if (!canSave || !raid || !raidSlug) return
|
||||
|
|
@ -116,12 +123,12 @@
|
|||
name_en: editData.name_en,
|
||||
name_jp: editData.name_jp,
|
||||
slug: editData.slug,
|
||||
level: editData.level,
|
||||
level: toNumberOrUndefined(editData.level),
|
||||
element: editData.element,
|
||||
group_id: editData.group_id,
|
||||
enemy_id: editData.enemy_id,
|
||||
summon_id: editData.summon_id,
|
||||
quest_id: editData.quest_id
|
||||
enemy_id: toNumberOrUndefined(editData.enemy_id),
|
||||
summon_id: toNumberOrUndefined(editData.summon_id),
|
||||
quest_id: toNumberOrUndefined(editData.quest_id)
|
||||
})
|
||||
|
||||
// Invalidate queries
|
||||
|
|
@ -192,6 +199,16 @@
|
|||
editable={true}
|
||||
type="number"
|
||||
/>
|
||||
<DetailItem
|
||||
label="Element"
|
||||
bind:value={editData.element}
|
||||
editable={true}
|
||||
type="select"
|
||||
options={elementOptions}
|
||||
/>
|
||||
</DetailsContainer>
|
||||
|
||||
<DetailsContainer title="IDs">
|
||||
<DetailItem
|
||||
label="Enemy ID"
|
||||
bind:value={editData.enemy_id}
|
||||
|
|
@ -210,13 +227,6 @@
|
|||
editable={true}
|
||||
type="number"
|
||||
/>
|
||||
<DetailItem
|
||||
label="Element"
|
||||
bind:value={editData.element}
|
||||
editable={true}
|
||||
type="select"
|
||||
options={elementOptions}
|
||||
/>
|
||||
</DetailsContainer>
|
||||
|
||||
<DetailsContainer title="Classification">
|
||||
|
|
|
|||
|
|
@ -37,12 +37,12 @@
|
|||
let isSaving = $state(false)
|
||||
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({
|
||||
name_en: '',
|
||||
name_jp: '',
|
||||
slug: '',
|
||||
level: 0,
|
||||
level: undefined as number | undefined,
|
||||
element: 0,
|
||||
group_id: '',
|
||||
enemy_id: undefined as number | undefined,
|
||||
|
|
@ -74,6 +74,13 @@
|
|||
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
|
||||
async function handleSave() {
|
||||
if (!canSave) return
|
||||
|
|
@ -86,12 +93,12 @@
|
|||
name_en: editData.name_en,
|
||||
name_jp: editData.name_jp,
|
||||
slug: editData.slug,
|
||||
level: editData.level,
|
||||
level: toNumberOrUndefined(editData.level),
|
||||
element: editData.element,
|
||||
group_id: editData.group_id,
|
||||
enemy_id: editData.enemy_id,
|
||||
summon_id: editData.summon_id,
|
||||
quest_id: editData.quest_id
|
||||
enemy_id: toNumberOrUndefined(editData.enemy_id),
|
||||
summon_id: toNumberOrUndefined(editData.summon_id),
|
||||
quest_id: toNumberOrUndefined(editData.quest_id)
|
||||
})
|
||||
|
||||
// Invalidate queries
|
||||
|
|
@ -157,6 +164,16 @@
|
|||
editable={true}
|
||||
type="number"
|
||||
/>
|
||||
<DetailItem
|
||||
label="Element"
|
||||
bind:value={editData.element}
|
||||
editable={true}
|
||||
type="select"
|
||||
options={elementOptions}
|
||||
/>
|
||||
</DetailsContainer>
|
||||
|
||||
<DetailsContainer title="IDs">
|
||||
<DetailItem
|
||||
label="Enemy ID"
|
||||
bind:value={editData.enemy_id}
|
||||
|
|
@ -175,13 +192,6 @@
|
|||
editable={true}
|
||||
type="number"
|
||||
/>
|
||||
<DetailItem
|
||||
label="Element"
|
||||
bind:value={editData.element}
|
||||
editable={true}
|
||||
type="select"
|
||||
options={elementOptions}
|
||||
/>
|
||||
</DetailsContainer>
|
||||
|
||||
<DetailsContainer title="Classification">
|
||||
|
|
|
|||
Loading…
Reference in a new issue