refactor: use generic uncap updater in Party
replaces three nearly identical uncap update methods (character, weapon, summon) with calls to updateGridItemUncap utility. reduces ~93 lines of duplicated state merging logic
This commit is contained in:
parent
094188d526
commit
484aeb0203
1 changed files with 19 additions and 94 deletions
|
|
@ -27,6 +27,7 @@
|
||||||
import { transformSkillsToArray } from '$lib/utils/jobSkills'
|
import { transformSkillsToArray } from '$lib/utils/jobSkills'
|
||||||
import { findNextEmptySlot, SLOT_NOT_FOUND } from '$lib/utils/gridHelpers'
|
import { findNextEmptySlot, SLOT_NOT_FOUND } from '$lib/utils/gridHelpers'
|
||||||
import { executeGridOperation, removeGridItem, updateGridItem } from '$lib/utils/gridOperations'
|
import { executeGridOperation, removeGridItem, updateGridItem } from '$lib/utils/gridOperations'
|
||||||
|
import { updateGridItemUncap } from '$lib/utils/gridStateUpdater'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
party?: Party
|
party?: Party
|
||||||
|
|
@ -589,40 +590,14 @@
|
||||||
_editKey?: string
|
_editKey?: string
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const response = await gridService.updateCharacterUncap(
|
return await updateGridItemUncap(
|
||||||
|
'character',
|
||||||
|
{ gridItemId: gridCharacterId, uncapLevel, transcendenceStep },
|
||||||
party.id,
|
party.id,
|
||||||
gridCharacterId,
|
party,
|
||||||
uncapLevel,
|
editKey,
|
||||||
transcendenceStep,
|
gridService
|
||||||
editKey || undefined
|
|
||||||
)
|
)
|
||||||
// The API returns {gridCharacter: {...}} with the updated item only (transformed to camelCase)
|
|
||||||
// We need to update just that character in the current party state
|
|
||||||
if (response.gridCharacter || response.grid_character) {
|
|
||||||
const updatedChar = response.gridCharacter || response.grid_character
|
|
||||||
const updatedParty = { ...party }
|
|
||||||
if (updatedParty.characters) {
|
|
||||||
const charIndex = updatedParty.characters.findIndex(
|
|
||||||
(c: any) => c.id === gridCharacterId
|
|
||||||
)
|
|
||||||
if (charIndex !== -1) {
|
|
||||||
// Preserve the character object reference but update uncap fields
|
|
||||||
const existingChar = updatedParty.characters[charIndex]
|
|
||||||
if (existingChar) {
|
|
||||||
updatedParty.characters[charIndex] = {
|
|
||||||
...existingChar,
|
|
||||||
id: existingChar.id,
|
|
||||||
position: existingChar.position,
|
|
||||||
character: existingChar.character,
|
|
||||||
uncapLevel: updatedChar.uncapLevel ?? updatedChar.uncap_level,
|
|
||||||
transcendenceStep: updatedChar.transcendenceStep ?? updatedChar.transcendence_step
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return updatedParty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return party // Return unchanged party if update failed
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Failed to update character uncap:', err)
|
console.error('Failed to update character uncap:', err)
|
||||||
throw err
|
throw err
|
||||||
|
|
@ -635,39 +610,14 @@
|
||||||
_editKey?: string
|
_editKey?: string
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const response = await gridService.updateWeaponUncap(
|
return await updateGridItemUncap(
|
||||||
|
'weapon',
|
||||||
|
{ gridItemId: gridWeaponId, uncapLevel, transcendenceStep },
|
||||||
party.id,
|
party.id,
|
||||||
gridWeaponId,
|
party,
|
||||||
uncapLevel,
|
editKey,
|
||||||
transcendenceStep,
|
gridService
|
||||||
editKey || undefined
|
|
||||||
)
|
)
|
||||||
// The API returns {gridWeapon: {...}} with the updated item only (transformed to camelCase)
|
|
||||||
// We need to update just that weapon in the current party state
|
|
||||||
if (response.gridWeapon || response.grid_weapon) {
|
|
||||||
const updatedWeapon = response.gridWeapon || response.grid_weapon
|
|
||||||
const updatedParty = { ...party }
|
|
||||||
if (updatedParty.weapons) {
|
|
||||||
const weaponIndex = updatedParty.weapons.findIndex((w: any) => w.id === gridWeaponId)
|
|
||||||
if (weaponIndex !== -1) {
|
|
||||||
// Preserve the weapon object reference but update uncap fields
|
|
||||||
const existingWeapon = updatedParty.weapons[weaponIndex]
|
|
||||||
if (existingWeapon) {
|
|
||||||
updatedParty.weapons[weaponIndex] = {
|
|
||||||
...existingWeapon,
|
|
||||||
id: existingWeapon.id,
|
|
||||||
position: existingWeapon.position,
|
|
||||||
weapon: existingWeapon.weapon,
|
|
||||||
uncapLevel: updatedWeapon.uncapLevel ?? updatedWeapon.uncap_level,
|
|
||||||
transcendenceStep:
|
|
||||||
updatedWeapon.transcendenceStep ?? updatedWeapon.transcendence_step
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return updatedParty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return party // Return unchanged party if update failed
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Failed to update weapon uncap:', err)
|
console.error('Failed to update weapon uncap:', err)
|
||||||
throw err
|
throw err
|
||||||
|
|
@ -680,39 +630,14 @@
|
||||||
_editKey?: string
|
_editKey?: string
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const response = await gridService.updateSummonUncap(
|
return await updateGridItemUncap(
|
||||||
|
'summon',
|
||||||
|
{ gridItemId: gridSummonId, uncapLevel, transcendenceStep },
|
||||||
party.id,
|
party.id,
|
||||||
gridSummonId,
|
party,
|
||||||
uncapLevel,
|
editKey,
|
||||||
transcendenceStep,
|
gridService
|
||||||
editKey || undefined
|
|
||||||
)
|
)
|
||||||
// The API returns {gridSummon: {...}} with the updated item only (transformed to camelCase)
|
|
||||||
// We need to update just that summon in the current party state
|
|
||||||
if (response.gridSummon || response.grid_summon) {
|
|
||||||
const updatedSummon = response.gridSummon || response.grid_summon
|
|
||||||
const updatedParty = { ...party }
|
|
||||||
if (updatedParty.summons) {
|
|
||||||
const summonIndex = updatedParty.summons.findIndex((s: any) => s.id === gridSummonId)
|
|
||||||
if (summonIndex !== -1) {
|
|
||||||
// Preserve the summon object reference but update uncap fields
|
|
||||||
const existingSummon = updatedParty.summons[summonIndex]
|
|
||||||
if (existingSummon) {
|
|
||||||
updatedParty.summons[summonIndex] = {
|
|
||||||
...existingSummon,
|
|
||||||
id: existingSummon.id,
|
|
||||||
position: existingSummon.position,
|
|
||||||
summon: existingSummon.summon,
|
|
||||||
uncapLevel: updatedSummon.uncapLevel ?? updatedSummon.uncap_level,
|
|
||||||
transcendenceStep:
|
|
||||||
updatedSummon.transcendenceStep ?? updatedSummon.transcendence_step
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return updatedParty
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return party // Return unchanged party if update failed
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Failed to update summon uncap:', err)
|
console.error('Failed to update summon uncap:', err)
|
||||||
throw err
|
throw err
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue